32 Урока Borland Delphi



              

Урок 14 - часть 2


Задача 1 Задача 2

Копия 1 приложения Копия 2 приложения

Данные Данные

Стек Стек

Очередь сообщений Очередь сообщений

Модуль приложения

Код

Ресурсы

Рис.3 : Копии приложения и модуль приложения

DLL - библиотека также является модулем. Она находится в памяти в единственном экземпляре и содержит сегмент кода и ресурсы, а также сегмент данных (см. рис. 4).

DLL-библиотека

Код

Ресурсы

Данные

Рис.4 : Структура DLL в памяти

DLL - библиотека, в отличие от приложения не имеет ни стека, ни очереди сообщений. Функции, помещенные в DLL, выполняются в контексте вызвавшего приложения, пользуясь его стеком. Но эти же функции используют сегмент данных, принадлежащий библиотеке, а не копии приложения.

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

Часто, в виде DLL создаются отдельные наборы функций, объединенные по тем или иным логическим признакам, аналогично тому, как концептуально происходит планирование модулей ( в смысле unit ) в Pascal. Отличие заключается в том, что функции из модулей Pascal компонуются статически - на этапе линковки, а функции из DLL компонуются динамически, то есть в run-time.
 
 

  • Создание DLL в Delphi (экспорт)
  • Для программирования DLL Delphi предоставляет ряд ключевых слов и правил синтаксиса. Главное - DLL в Delphi такой же проект как и программа.

    Рассмотрим шаблон DLL:

    library MyDll;

    uses

    <используемые модули>;

    <объявления и описания функций>

    exports

    <экспортируемые функции>

    begin

    <инициализационная часть>

    end.

    Имя файла проекта для такого шаблона должно быть MYDLL.DPR.

    !!!! К сожалению, в IDE Delphi автоматически генерируется только проект программы, поэтому Вам придется проект DLL готовить вручную. В Delphi 2.0 это неудобство устранено.

    Как и в программе, в DLL присутствует раздел uses. Инициализационная часть необязательна. В разделе же exports перечисляются функции, доступ к которым должен производится из внешних приложений.




    Содержание  Назад  Вперед