Delphi - объектно-ориентированный язык программирования, разработанный компанией Borland в 1995 году. Он основан на языке программирования Pascal, но имеет более расширенные возможности и добавлены новые функции.
Delphi является интегрированной средой разработки (IDE), которая позволяет разрабатывать программное обеспечение для различных платформ, включая Windows, macOS, Android и iOS. Delphi достигает многоплатформенности с помощью...
DLL возможно загружать двумя способами:
Давайте создадим простую библиотеку DLL:
{Project file name: c:exampleexdoubleexdouble.dpr} library ExDouble; // my simple dll function calc_double(r: real): real; stdcall; begin result := r * 2; end; exports calc_double index 1; end;
Теперь посмотрим, как её можно загружать:
Статическая загрузка DLL
При таком способе загрузки достаточно поместить файл DLL в директорию приложения или в директорию Windows, или в WindowsSystem, WindowsCommand. Однако, если система не найдёт этого файла в этих директория, то высветится сообщение об ошибке (DLL не найдена, или что-то в этом духе).
unit untMain; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation function calc_double(r: real): real; stdcall; external 'ExDouble.dll'; {$R *.DFM} procedure TForm1.Button1Click(Sender: TObject); begin // в окошке сообщения будет цифра 21 ShowMessage(FloatToStr(calc_double(10.5))); end; end.
Динамическая загрузка DLL
При динамической загрузке требуется написать немного больше кода.
А вот как это выглядит:
unit untMain; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type Tcalc_double = function ( r: real ): real; TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.Button1Click(Sender: TObject); var hndDLLHandle: THandle; calc_double: Tcalc_double; begin try // загружаем dll динамически hndDLLHandle := loadLibrary ( 'ExDouble.dll' ); if hndDLLHandle <> 0 then begin // получаем адрес функции @calc_double := getProcAddress ( hndDLLHandle, 'calc_double' ); // если адрес функции найден if addr ( calc_double ) <> nil then begin // показываем результат ( 21...) showMessage ( floatToStr ( calc_double ( 10.5 ) ) ); end else // DLL не найдена ("handleable") showMessage ( 'Function not exists...' ); end else // DLL не найдена ("handleable") showMessage ( 'DLL not found...' ); finally // liberar freeLibrary ( hndDLLHandle ); end; end; end.