Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

модуль содержащий код данные и ресурсы которые могут быть использованы несколькими программами одновременн

Работа добавлена на сайт samzan.net:


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.  Включить подпрограмму в один модуль с разделяемым кодом и в каждом приложении с помощью uses сделать ссылку на этот модуль.
  3.  Включить подпрограмму в DLL и в каждом приложении дать ссылку на эту подпрограмму.

Расходы ресурса памяти(дисковой и основной) будут такими:

В первом варианте: 1) на диске под паскаль текст одной и той же подпрограммы будет выделено место(по кол-ву приложений). 2) подпрограмма в процессе компиляции приложения будет включена в исполняемые файлы всех приложений, следовательно на диске под исполняемый код той же подпрограммы будет многократно выделена память.

3) В основной памяти ЭВМ также многократно будет выделено место под исполняемый код подпрограммы(по кол-ву одновременно загруженных приложений).

Во-втором варианте: первый недостаток будет устранён, но 2-ой и 3-ий полностью сохранятся.

В третьем варианте: будет устранён и второй недостаток, а также при выполнении определённых условий можно устранить и 3-ий недостаток.

Откомпилированная подпрограмма будет храниться только в одном месте, т.е. DLL и при параллельной работе нескольких приложений, использующих данную DLL её загрузка в физическую память в глобальную кучу ОС будет осуществлена только один раз – а именно по первому запросу любого из указанных приложений пользователя. Образ DLL будет отображён из системной глобальной кучи в виртуальное адресное пространство всех процессов порожденных ОС при загрузке приложений.

 

Напоминание об особенности организации памяти в современных 32-х разрядных ОС:

в процессе управления памятью компьютера используется механизм виртуальной памяти. Каждому процессу(загруженному приложению или DLL) выделяется 4-х Гбайтное виртуальное адресное пространство недоступное для других процессов. Данный процесс функционирует в своём почти неограниченном виртуальном пространстве, не отвлекаясь от решения проблем использования ограниченной физической памяти, а также на организацию ввода/вывода данных и т.д.

в частности реальное адресное пространство(ОС) может содержать только часть исполняемых кодов и данных каких-то параллельно работающих приложений и используемой ими DLL, а именно ту часть которая необходима на данном этапе. В тоже время виртуальная память организована так, как будто в ней хранятся полные коды всего приложения и всех подпрограмм DLL, загруженные по вызову данного приложения. Т.е. одна физическая копия DLL, хранимая в основной памяти, многократно виртуально отображается в адресное пространство разных процессов.

В целом можно констатировать преимущества обеспечиваемые DLL:

  1.  Подпрограммы описанные в DLL могут одновременно обслуживать несколько приложений и при этом в физической памяти они хранятся в виде одной копии(при выполнении условий). Т.о. применение DLL расширяет и развивает область применения идеи модульного построения программ.
  2.  DLL может обеспечивать хранение некоторых общих для различных приложений ресурсов, например объёмных растровых файлов.
  3.  DLL обеспечивает поддержку новых версий приложений: если изменения коснулись только DLL, то пользователю достаточно передать только новую версию DLL, а не весь exe-файл.
  4.  При создании exe-файла и DLL могут использоваться разные языки программирования(Delphi, C++).
  5.  DLL могут быть загружены в память не обязательно одновременно с загрузкой приложения, т.е статически, но и динамически, т.е. в процессе работы приложения, т.е тогда когда действительно понадобилась подпрограмма из DLL.
  6.  DLL может рассматриваться как средство  скрытия информации о реализации экспортируемых подпрограмм. Если необходимо это сделать, то клиенту передаётся только скомпилированная библиотека и специальный модуль интерфейса, в котором хранятся заголовки подпрограмм с комментариями.
  7.  DLL явл. Основным средством COM-технологий.

Указанные преимущества имеют обратную сторону:

в некоторых случаях параллельная эксплуатация 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

Идентификатор (константа) режима доступа

Семантика

fmOpenRead

Разрешено только чтения файла 

fmOpenWrite

Разрешена только запись файла

fmOpenReadWrite

Разрешено чтение и запись файла

Характер совместного использования файла различными приложениями можно задать путём применения поразрядной операции or к константам из табл.1 и к константам, задающим режимы совместного доступа.

Константы совместного доступа                                                   

Константы совместного доступа                                                   таблица2

Идентификатор (константа) режима доступа

Семантика

fmShareExelusive

Разделение не разрешается.

fmShareDenyWrite

Попытки программ открыть файл с доступом fmOpenWrite будут не успешными.

fmShareDenyRead

Попытки программ открыть файл с доступом fmOpenRead будут не успешными.

fmShareDenyNone

Попытки программ открыть файл с любым доступом будут успешными.

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;

Комментарий:

  1.  оператор Application.Handle:=AppHandle; необходим по следующей причине: при компиляции DLL, как и при компиляции приложения, создаётся объект Application класса TApplication. Поэтому при запуске приложения, обращающегося к DLL, будет создано два объекта класса TApplication. Соответственно после вызова модальной формы на панели задач появятся две пиктограммы: приложения и модальной формы из библиотеки. При этом щелчком по пиктограмме модальную форму можно вызвать на экран, но её элементы управления, включая кнопку закрытия формы, будут недоступны. Возникнет некорректная ситуация, а если форма полностью закроет экран, то вообще возникнет зависание. В указанном операторе переменной Application библиотеки передается ссылка на такой же объект, но уже приложения, тем самым объект Application библиотеки будет проигнорирован. В результате объект Application приложения берёт на себя всю поддержку по рассылке сообщений ОС всем элементам управления модальной формы, созданной в DLL. Как полезный побочный эффект – с панели задач Windows исчезнет пиктограмма DLL.
  2.  оператор  FDialog:= TModForm.Create(Application); должен быть включён в коды, поскольку в отличие от приложений, т.е. exe файлов, при загрузке библиотеки, т.е. DLL файлов, входящие в его состав формы автоматически не создаются.
  3.  в данной примере разрушение формы обеспечивается методом Release. Его особенность состоит в том, что он не вызывает непосредственно дескриптор формы. Он вызывает метод PostMessage, который посылает окну формы сообщение, которое уведомляет о необходимости разрушения формы. Это сообщение попадает в очередь, а значит оно будет выполнено только после того, как будут обработаны более ранние сообщения.

Т.о. вызов метода 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, то надо знать способы работы с таблицами.




1. ВЕЧНЫХ ПРОБЛЕМАХ РАБОТЫ В НАУКЕ И ПРАКТИКЕ [1
2. Инфляция и антиинфляционное регулирование
3. на тему- Испытание ядерного оружия как источник потенциальной опасности радионуклидного загрязнения б
4. Тематические праздники как явление современной городской культуры на примере города Ростова-наДону
5. Тема 6. Технологічні коди Методологічні основи конструкторської класифікації деталей
6. Лабораторная работа ’9 Определение скорости звука в воздухе в зависимости от температуры
7. Психопрофилактика наркозависимости
8. тема организации войск в России в 1810 1857 гг
9. ЛИНЕЙНАЯ АЛГЕБРА.html
10. Ревизора Подготовила ученица 8а класса Первышева Елизавета Младший современник А
11. Современные теории происхождения права
12. Тема 11- Правовая охрана и использование объектов животного мира
13. Вариант 9 Отличительная особенность фундаментального уровня социологического знания состоит в том что
14. ЛАБОРАТОРНАЯ РАБОТА ’ 31 Тема- Проектирование БД
15. Основные этапы и особенности проведения аудита денежных средств
16. ЛЕКЦИЯ43- РОЛЬ ПЕЧЕНИ В ОБМЕНЕ ВЕЩЕСТВ
17. Роль техники и технологии в процессе развития культуры
18. Особенности развития словаря детей старшего дошкольного возраста с общим недоразвитием речи III уровня
19. Разработка плана организации работы маркетингового отдела, оказывающего услуги по комплексной автоматизации и информатизации медицинской отрасли
20. Реферат- Оформление наглядных материалов в научно-исследовательских работа