Справочное руководство по Delphi

Создание DLL в Delphi (экспорт)


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

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

library MyDll;

uses

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

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

exports

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

begin

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

end.

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

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



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

Экспортирование функций (и процедур ) может производится несколькими способами:

    • по номеру (индексу);
    • по имени.
    • В зависимости от этого используется различный синтаксис:

      {экспорт по индексу}

      procedure ExportByOrdinal; export;

      begin

      .....

      end;

      exports

      ExportByOrdinal index 10;

      {экспорт по имени}

      procedure ExportByName; export;

      begin

      .....

      end;

      exports

      ExportByName name 'MYEXPORTPROC'; { имя для экспорта может не совпадать с именем функции ! }

      Так как в Windows существует понятие "резидентных функций" DLL, то есть тех функций, которые находятся в памяти на протяжении всего времени существования DLL в памяти, в Delphi имеются средства для организации и такого рода экспорта:

      exports

      ExportByName name 'MYEXPORTPROC' resident;

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

      Если же Вы будете экспортировать функции следующим образом:

      exports

      MyExportFunc1,

      MyExportFunc2,

      .....;

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



          1. Содержание раздела