Irgendwie stehe ich komplett auf dem Schlauch :wall: ich komm einfach nicht mehr weiter ....
Wäre echt nett, wenn ihr mal drüberschaut. Ich habe mir ein Beispiel angeschaut (CallBack),
dass konnte mir jedoch auch nicht weiterhelfen :-(((
Hauptunit
Delphi-Quellcode:
TYPE TCallBackFunction = FUNCTION (hLib:Cardinal) : Cardinal;
PROCEDURE FreeDLL(hLib:Cardinal);
TYPE Tcreatedll = PROCEDURE (hLib:Cardinal);
var
MainForm: TMainForm;
implementation
{$R *.dfm}
procedure TMainForm.bLoadDllClick(Sender: TObject);
VAR hLib:cardinal; Mcreatedll : Tcreatedll;
BEGIN
hLib := LoadLibrary(PChar('pDll_CallBack.dll'));
IF hLib <> 0 THEN BEGIN
@Mcreatedll := GetProcAddress(hLib, 'createdll');
IF @Mcreatedll <> NIL
// Hier muss noch was passieren!
THEN Mcreatedll(hLib);
END;
end;
PROCEDURE FreeDLL(hLib:Cardinal);
BEGIN
FreeLibrary(hLib);
END;
Die DLL.dpr
Delphi-Quellcode:
library pDll_CallBack;
uses
SysUtils,
Classes,
uDll_Form in 'uDll_Form.pas' {DllForm};
{$R *.res}
exports
createdll;
begin
end.
Das DLL Formular
Delphi-Quellcode:
// Die Prozedur für den Export
PROCEDURE createdll(hLib:Cardinal);
// in dieser Variable halte ich den Parameter der DLL
VAR AhLib : Cardinal;
TYPE TCallBackFunction =
FUNCTION (hLib:Cardinal) : Cardinal;
var
DllForm: TDllForm;
implementation
{$R *.dfm}
PROCEDURE closedll(hLib:Cardinal);
BEGIN
// ???
END;
PROCEDURE createdll(hLib:Cardinal);
BEGIN
IF NOT (Assigned(DllForm))
THEN DllForm := TDllForm.Create(
NIL);
// Parameter zur speicherung übergeben
AhLib := hLib;
DllForm.Show;
END;
procedure TDllForm.bCloseClick(Sender: TObject);
begin
close;
end;
procedure TDllForm.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
DllForm.Free;
DllForm :=
NIL;
// Hier muss das Callback starten
closedll(AhLib);
end;
end.