// Call DLL Program (Normal Application Project) // This example calls a Quick Report within a DLL. // Author: Michael Casse. // 18-12-2001. unit uMain;
interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Buttons;
type
TForm1 = class(TForm)
btnClose: TBitBtn;
btnReport: TBitBtn;
procedure btnReportClick(Sender: TObject);
private{ Private declarations }public{ Public declarations }end;
var
Form1: TForm1;
implementation{$R *.DFM}procedure TForm1.btnReportClick(Sender: TObject);
var
LibHandle: THandle;
fDisplaySampleReport: procedure;
begin
LibHandle := LoadLibrary('Report.dll');
if LibHandle = 0 thenraise Exception.Create('Unable to Load DLL...')
elsebegintry @fDisplaySampleReport := GetProcAddress(LibHandle, 'DisplaySampleReport');
if @fDisplaySampleReport <> nilthen
fDisplaySampleReport; // Invoke the Procedure within the DLL excepton E: Exception do
ShowMessage('Exception error: ' + E.Message);
end;
end;
FreeLibrary(LibHandle); // Free Memory Allocated for the DLL end;
end.
//////////////////////////////////////////////// // DLL Project library Report;
uses SysUtils, Classes,
uReport in 'uReport.pas' {Form1};
procedure DisplaySampleReport;
begin
Form1 := TForm1.Create(nil);
try
Form1.QuickRep1.Preview;
finally
Form1.Free;
end;
end;
exports DisplaySampleReport;
end.
Пример кода на языке Delphi, демонстрирующий вызов процедуры из DLL (Dynamic Link Library).
Проект основной приложения
В проекте основной приложения uMain.pas содержится форма с двумя кнопками: btnClose и btnReport. При клике на кнопку btnReport она вызывает процедуру DisplaySampleReport из DLL.
Код для загрузки DLL и вызова процедуры выглядит следующим образом:
procedureTForm1.btnReportClick(Sender:TObject);varLibHandle:THandle;fDisplaySampleReport:procedure;beginLibHandle:=LoadLibrary('Report.dll');ifLibHandle=0thenraiseException.Create('Unable to Load DLL...');elsebegintry@fDisplaySampleReport:=GetProcAddress(LibHandle,'DisplaySampleReport');if@fDisplaySampleReport<>nilthenfDisplaySampleReport;// Вызов процедуры в DLLexceptonE:ExceptiondoShowMessage('Exception error: '+E.Message);end;end;FreeLibrary(LibHandle);// Освобождение памяти, зарезервированной для DLLend;
Проект DLL
В проекте DLL Report.dpr содержится процедура DisplaySampleReport, которая создает экземпляр формы (TForm1) и вызывает ее метод QuickRep1.Preview.
Как это работает
Когда кнопка btnReport кликается, проект основной приложения загружает DLL с помощью LoadLibrary. Затем он получает указатель на процедуру DisplaySampleReport с помощью GetProcAddress.
Если процедура найдена, код вызывает ее, присваивая ей адрес в переменную fDisplaySampleReport, а затем вызывая ее.
После вызова процедуры код освобождает память, зарезервированную для DLL, с помощью FreeLibrary.
В статье описывается пример вызова процедуры из DLL-библиотеки в приложении Delphi, где процедура из DLL-кода вызывает Quick Report для отображения отчета.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.