W jaki sposób zadeklarować procedure z parametrami wywoływaną dynamicznie z biblioteki DLL ?
To przykład z artykułu...
var
DLL: THandle;
WczytajCos: procedure;
begin
DLL := LoadLibrary('biblioteka.dll');
try
@WczytajCos := GetProcAddress(DLL, 'WczytajCos');
if @WczytajCos <> nil then WczytajCos;
finally
FreeLibrary(DLL);
end;
end;
A jak zadeklarować, jeśli procedura miała by parametry ?
WczytajCos(Parametr1: String);
Jeśli wywołam tak, mam Access Violation przy linii if@WczytajCos <> nil then ...
type
TWczytajCosP = procedure (Forma: TForm; Plik: String);
var
DLL: THandle;
WczytajCos: TWczytajCosP;
begin
DLL := LoadLibrary('biblioteka.dll');
try
@WczytajCos := GetProcAddress(DLL, 'WczytajCos');
if @WczytajCos <> nil then WczytajCos(Form1, ExtractFilePath(Application.ExeName) + 'dane.txt');
finally
FreeLibrary(DLL);
end;
end;
W bibliotece DLL takie wywołanie
library lib1;
uses
Forms, Dialogs;
procedure WczytajCos(Forma: TForm; Plik: String); stdcall;
begin
ShowMessage(Forma.Name + ' | Plik: ' + Plik);
end;
exports
WczytajCos;
end.