Введение в программирование

       

Создание DLL-библиотеки


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

Для того чтобы создать DLL-библиотеку, следует использовать шаблон приложения DLL Wizard.

В отличие от обычного модуля, начинающегося с ключевого слова unit, модуль DLL-библиотеки начинается с ключевого слова library.

Секция uses модуля DLL-библиотеки требует подключения только двух пакетов: SysUtils и Classes.

Функции из DLL-библиотеки могут вызываться как из приложений, разработанных в Delphi, так и из приложений, написанных на других языках программирования, таких как C++.

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

При объявлении процедуры или функции может быть указан один из следующих механизмов передачи параметров:

  • register
  • cdecl,
  • stdcall,
  • safecall.

Способ передачи параметров указывается через точку с запятой после описания функции.

Например: function F1(X, Y, Z: Real): Real; stdcall;

Различные способы передачи параметров определяют порядок их передачи (слева направо или справа налево), а также указывают, кто будет освобождать память стека (вызываемая или вызывающая процедура).

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

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

  • по имени функции, используемому в DLL-библиотеке;
  • по имени функции, заданному как имя экспорта;
  • по присвоенному функции индексу (указанному в секции exports).

Например:

library Project1; uses SysUtils, Classes; {$R *.res} function F1(X: Integer): Integer; stdcall; begin F1:=X*2; end; function F2(X: Integer): Integer; stdcall; begin F2:=X*X; end; exports F1 , {Функция будут доступна по имени F1} F2 index 2 ; {Функция будут доступна по индексу 2} end.

DLL-библиотека не является выполняемым модулем, поэтому для получения dll-файла достаточно произвести компиляцию проекта.



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