Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
1. DLL общие определения,преимущества DLL это программный модуль содержащий код, данные и ресурсы которые могут быть использованы несколькими программами одновременно. Исходный текст библиотеки разработанный, например, в среде Delphi похож на обычный текст за исключением служебного слова library вместо Program. Соот-ий файл библиотеки имеет расширение .dpr Результат компиляции такого модуля хранится в .dll Бывают другие расширения .drv, .sys,.fon .drv для библиотек явл-ся драйверами устройств .sys для системных файлов .fon файл ресурсов шрифтов Скомпилированная библиотека не явл. Независимо исполнимым файлом, т.е. его нельзя запустить самостоятельно как exe файл. В тоже время библиотека содержит исполняемые коды, которые могут быть загружены в память компьютера, а отдельные фрагменты могут вызываться работающими приложениями. Примеры DLL: основа windows: KERNALL. DLL // ядро ОС USER32. DLL // интерфейс пользователя GDI32. DLL// ф-ии для работы с графикой Пример. Пусть в нескольких приложениях должна использоваться одна и та же подпрограмма. Возможны варианты действий:
Расходы ресурса памяти(дисковой и основной) будут такими: В первом варианте: 1) на диске под паскаль текст одной и той же подпрограммы будет выделено место(по кол-ву приложений). 2) подпрограмма в процессе компиляции приложения будет включена в исполняемые файлы всех приложений, следовательно на диске под исполняемый код той же подпрограммы будет многократно выделена память. 3) В основной памяти ЭВМ также многократно будет выделено место под исполняемый код подпрограммы(по кол-ву одновременно загруженных приложений). Во-втором варианте: первый недостаток будет устранён, но 2-ой и 3-ий полностью сохранятся. В третьем варианте: будет устранён и второй недостаток, а также при выполнении определённых условий можно устранить и 3-ий недостаток. Откомпилированная подпрограмма будет храниться только в одном месте, т.е. DLL и при параллельной работе нескольких приложений, использующих данную DLL её загрузка в физическую память в глобальную кучу ОС будет осуществлена только один раз а именно по первому запросу любого из указанных приложений пользователя. Образ DLL будет отображён из системной глобальной кучи в виртуальное адресное пространство всех процессов порожденных ОС при загрузке приложений.
Напоминание об особенности организации памяти в современных 32-х разрядных ОС: в процессе управления памятью компьютера используется механизм виртуальной памяти. Каждому процессу(загруженному приложению или DLL) выделяется 4-х Гбайтное виртуальное адресное пространство недоступное для других процессов. Данный процесс функционирует в своём почти неограниченном виртуальном пространстве, не отвлекаясь от решения проблем использования ограниченной физической памяти, а также на организацию ввода/вывода данных и т.д. в частности реальное адресное пространство(ОС) может содержать только часть исполняемых кодов и данных каких-то параллельно работающих приложений и используемой ими DLL, а именно ту часть которая необходима на данном этапе. В тоже время виртуальная память организована так, как будто в ней хранятся полные коды всего приложения и всех подпрограмм DLL, загруженные по вызову данного приложения. Т.е. одна физическая копия DLL, хранимая в основной памяти, многократно виртуально отображается в адресное пространство разных процессов. В целом можно констатировать преимущества обеспечиваемые DLL:
Указанные преимущества имеют обратную сторону: в некоторых случаях параллельная эксплуатация DLL несколькими приложениями может замедлить выполнение отдельных приложений, но преимущество более весомо. 25. Общее понятие файлов,отображаемых в память. Подпрограммы для создания и открытия файла, отобр-го в память Возможность отображения файла в основную память появилась в 32-х разрядных ОС. В процессе отображения резервируется область виртуального адресного пространства процесса, а затем физическая память файла на диске связывается с этим адресом зарезервированного пространства памяти. В результате на содержимое файла можно ссылаться с помощью указателя, действующего в этой зарезервированной области памяти. Тем самым программист оказывается избавленным от организации ввода/вывода данных файла и фактически вся работа с файлом ведётся как с обычной динамической структурой в основной памяти. Три основные области применения файлов, отображаемых в памяти: - система Win32 загружает и выполняет .exe и .dll файлы как файлы, отображаемые в памяти, при этом экономится пространство файла подкачки (peging fill), что обеспечивает уменьшение времени загрузки. - доступ к содержимому файла осуществляется с помощью указателя на область отображённой памяти и это не только упрощает процесс доступа к данным файла, но не освобождает программиста от необходимости применять различные схемы буферизации данных. - файлы, отображенные в памяти, предоставляют возможность разделения данных между различными процессами, выполняющиеся на разных компьютерах. Подпрограммы, предназначенные для работы с файлами, отображёнными в памяти Для получения связи дискового файла с областью адресного пространства процесса необходимо создать объект отображения файла (объект ядра ОС). Кроме того, для просмотра и редактирования содержимого файла необходимо отобразить данные файла в адресное пространство процесса, т.е. нужно создать окно просмотра (file view), которое позволяет получить доступ к файлу через указатель. Замечание: Термины “окно просмотра” и “просмотр файла” не связаны с визуализацией данных файла на экране дисплея. Имеется в виду виртуальное окно как программная конструкция и доступ к данным файла по адресам виртуального пространства, но не к адресам диска. В то же время можно параллельно организовать действительную визуализацию данных файла, например в Memo. При записи в окно просмотра система выполняет кэширование и загрузку данных файла. Кроме того, оно (окно просмотра) управляет выделением и освобождением памяти. На долю программиста остаётся только работа по редактированию данных, заложенных в некоторой области памяти. Помимо указанных удобств, появляется выигрыш в скорости обработки данных. Создание и открытие файла Первый шаг в работе с файлом, отображённым в памяти, состоит в создании и/или открытии уже существующего дискового файла, т.е. в получении дескриптора файла, подлежащего отображению. Для этого используются функции: function FileCreate(const FileName: string): integer; function FileOpen(const FileName: string; Mode: word): integer; Функция FileCreate создаёт новый файл с именем, которое задано внутри пути. При успешном выполнении функция возвратит дескриптор дискового файла, в противном случае значение: INVALID_HANDLE_VALUE Функция FileOpen открывает существующий файл, используя заданный режим доступа (Mode). При успешном открытии возвращается дескриптор файла. Возможные режимы доступа таблица1. Константы доступа таблица1
Характер совместного использования файла различными приложениями можно задать путём применения поразрядной операции or к константам из табл.1 и к константам, задающим режимы совместного доступа. Константы совместного доступа Константы совместного доступа таблица2
|
13. Отображение модальных форм в DLL Библиотека как самостоятельная компилируемая программная единица может включать в свой состав модальные формы. Рассмотрим пример, в котором в рамках статически загружаемой DLL создаётся также и форма, предназначенная для организации диалога с пользователем. Суть примера: в приложении вызывается функция ExecDialog, экспортируемая библиотекой, в свою очередь которая должна вызывать модальную форму, при взаимодействии с которой, пользователь может вызывать на эту форму в TImage некоторое изображение (растровый файл). Кроме того функция должна возвращать строковый параметр имя файла содержащего изображение. Создадим в Delphi заготовку для DLL. В рамках проекта DLL создадим новую форму ModForm класса TModForm. Поместим на эту форму TEdit, в котором пользователь может указывать путь к файлу изображения. Поместим элемент типа TImage и кнопку для загрузки изображения. Метод реакции на щелчок содержит такой оператор: Image1.Picture.LoadFromFile(Edit1.Text); Поскольку форму предполагается использовать как модальную, то закрывать её надо методом Close. Если закрыть методом Hide, то она с экрана исчезнет, но управление не отдаст, программа зависнит. В библиотеке в основном файле (library) объявим следующие коды: var C: array [1..1000] of Char; // буфер для передачи строки в приложение (глобальная) function ExecDialog(AppHandle: THandle; var PictName: PChar): Boolean; stdcall;{функция обеспечивает вызов модальной формы. Входной параметр AppHandle это дескриптор вызывающего приложения; выходной параметр PictName это имя файла содержащего изображение} var FDialog: TModForm; // объявляется объект класса TModForm S: string; begin FDialog:= nil; PictName:= nil; Result:= false; Application.Handle:=AppHandle; // смотри общий комментарий try FDialog:= TModForm.Create(Application); // явно создаём форму FDialog.ShowModal; {здесь модальная форма перехватывает управление и пользователь получит возможность совершить на ней необходимые действия(вызов изображения). Только после её закрытия выполнятся последующие операторы} FillMemory(@C[0], SizeOf(C), 0); S:= FDialog.Edit1.Text; // берём из редактора путь к файлу if Length(S)>0 then StrCopy(C, FDialog.Edit1.Text); // размещаем в буфере путь к файлу PictName:=@ C[0]; // передаём указателю адрес буфера Result:=true; FDialog.Release; //разрушаем форму FDialog:= nil; except on E: Exception do begin ShowMessage (E.Message); // стандартное сообщение if Assigned(FDialog) then begin //страховочные действия FDialog.Release; // по разрушению FDialog:= nil; // формы end; end; end; end;
exports ExecDialog; Комментарий:
Т.о. вызов метода Release это страховочная акция, полезная в том случае, если форма сложна и в диалоге с пользователем может возникнуть длинны очередь сообщений. В нашем примере метод Free будет давать тот же результат, что и метод Release. В приложении функция ExecDialog может быть вызвана так: procedure TForm1.Button1Click (Sender: TObject); var P: PChar; S: string; begin if ExecDialog(Application.Handle, P) then begin S:= StrPas(P); Label1.Caption:= S; end; end; Вызов модальной формы в DLL может быть организован и в случае динамически загружаемой DLL. Особенность: вместо метода Release нужно использовать метод Free, иначе команда на разрушение формы через сообщение (Release) может придти позже выгрузки DLL. В DLL можно отображать и немодальные формы. |
37. Понятие OLE-технологии. Понятия, внедрения и связывания объектов OLE (Object Linking and Embedding) является технологией связывания и внедрения объектов, созданных приложениями, выступающими в качестве COM-сервера в других приложениях. Фактически это надстройка над COM, предназначающаяся фирмой Microsoft прежде всего для обеспечения возможности использования документов, подготавливаемых с помощью редактора Word, Excel и др., выступающих в качестве COM сервера, внутри других клиентских программ. Одним из основных требований, соответствующих спецификации СОМ, являются требования активации по месту (in-place-activation), т.е. реализации возможности редактирования объектов, находящихся в так называемом OLE-контейнере, который расположен в программе клиента. Это реализуется за счёт автоматического запуска для этой цели приложения-сервера, напр. редактора Word. В среду Delphi с этой целью включён ряд компонентов. Рассмотрим особенности OLE-технологии на примере среды Delphi. Внедрение и связывание объектов с помощью компонента TOleContainer Существует два принципиально разных способа организации взаимодействия клиента с OLE-объектами: связывание, внедрение (встраивание). Связывание объекта это ассоциирование файла, содержащего OLE-объект, с клиентским приложением. Файл OLE-объекта никогда не сохраняется в OLE-контейнере. Их связь осуществляется через ссылку на файл, который имеется в OLE-контейнере. Т.о. при связывании файл, содержащий, например документ Word, существует автономно от клиентского приложения. Получив ссылку на OLE-объект, OLE-контейнер выполняет необходимую работу (редактирует документ и т.д.) с документом и после сохранения файла документ существует полностью независимо от клиентского приложения. Связывание объекта с клиентскими приложениями может быть осуществлено только на этапе работы приложения. Терминология. Обычный файл, например документ Word, не является файлом OLE-объекта ( .ole), это просто файл данных. Для того чтобы создать из него файл OLE-объекта ( .ole) необходимо дать соответствующую команду серверу. Преимущества связывания: 1) Доступ к одному документу могут получить разные клиентские приложения. 2) Если данные, содержащиеся в файле документа, меняются, например, в ходе работы с файлом одного клиента, то изменения автоматически отображаются в OLE-контейнере других клиентов. 3) Если OLE-объект очень большой, то использование именно связывания позволяет разгружать клиентские приложения. Кроме этого экономится внешняя и основная память. Недостатки связывания обусловлены сложностью контроля за ситуацией; а именно необходимы специализированные средства для обеспечения одновременной работы разных клиентов с одним OLE-объектом, а так же организационные и технические меры, предотвращающие уничтожение или недопустимые изменения одним из клиентов документа, находящегося в общем пользовании нескольких клиентов. Внедрение объекта это сохранение объекта непосредственно в клиентском приложении. При этом объект хранится в приложении либо постоянно, если он создан на этапе конструирования приложения, либо только в течение работы приложения, если он внедрен в процессе работы приложения. Другие OLE-контейнеры не будут иметь доступ к объекту, внедренному в данный OLE-контейнер. Внедренный объект может быть сохранен в виде специального OLE-файла, из которого он будет доступен для любого OLE-контейнера, но не для сервера, на котором был создан. Итак, внедрение объекта может быть осуществлено как на этапе разработки клиентского приложения, так и в процессе его работы. Преимущества внедрения: полный контроль клиента над объектом. Применение внедрения будет оправдано, если объект небольшой, либо он не предназначен для использования многими клиентами, например в рамках большой сети. В среде Delphi компонент TOleContainer является весьма универсальным средством реализации внедрения и связывания объектов. Он отвечает за организацию этого процесса со стороны клиента. При задействовании этого компонента (TOleContainer) предполагается, что сервер существует и зарегистрирован в ОС компьютера. Компонент инкапсулирует все методы, необходимые для реализации контакта с сервером. Фактически программисту можно и не знать, как организован интерфейс интересующего его объекта. Необходимо только знание имени сервера, которое зарегистрировано в системном реестре ОС компьютера. Пользователю клиентского приложения естественно необходимо умение обращаться собственно с объектом, например, если объект это excel, то надо знать способы работы с таблицами. |