logo
Программирование в среде Delphy / Программирование в среде Delphi

28.2. Использование dll

При программировании можно использовать статическую или динамическую загрузку DLL. При статической загрузке следует в разделе описаний основной программы вставить для приведенного выше примера следующие операторы:

Function F1(….):тип1; external ’MyLib’;

Procedure P2(….); external ’MyLib’;

Procedure Proc3(…..); external ’MyLib’;

Они определяют названия внешних процедур и функций и библиотеку, из которой их следует импортировать при запуске программы.

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

Procedure TForm1.Button1Click(Sender:TObject);

Type TF1=Function(….):тип1;

TP2=Procedure(….);

TP3=Procedure(….);

Var LibH:THandle;

Fun1:TF1;

Proc2:TP2;

Proc3:TP3;

Begin

LibH:=LoadLibrary(’MyLib’);

@Fun1:=GetProcAddress(LibH,’F1’);

@Proc1:=GetProcAddress(LibH,Pchar(LongInt(2)));

@Proc3:=GetProcAddress(LibH,’Proc3’);

…………

FreeLibrary(’MyLib’);

End;

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