Hi, ich habe im Forum was gefunden was ich auch einigermaßen verstanden habe, leider haut mir ein
AV alles um die Ohren :-(((
http://www.delphipraxis.net/internal...k+dll+formular
MainForm
Delphi-Quellcode:
TYPE Tcreatedll = PROCEDURE (ACallBack: Pointer);
PROCEDURE FreeDLL;
var
Form1: TForm1; hLib:cardinal;
implementation
{$R *.DFM}
PROCEDURE FreeDLL;
BEGIN
// zum Test ob das CallBack klappt
ShowMessage('Hallo');
// Un hier knallt es! Dabei wird auch das Hauptformular geschlossen, wenn der Debugger
// deaktiviert ist.
FreeLibrary(hLib);
END;
procedure TForm1.bLoadDllClick(Sender: TObject);
VAR Mcreatedll : Tcreatedll;
BEGIN
hLib := LoadLibrary(PChar('pDll.dll'));
IF hLib <> 0 THEN BEGIN
@Mcreatedll := GetProcAddress(hLib, 'CreateDLL');
IF @Mcreatedll <> NIL
// Hier wird die Prozedur übergeben die ausgeführt werden soll.
THEN Mcreatedll(@FreeDLL);
END;
end;
end.
Die DLL.dpr
Delphi-Quellcode:
library pDll;
uses
SysUtils,
Classes,
uDllForm in 'uDllForm.pas' {DllForm};
{$R *.RES}
exports
CreateDLL;
end.
Und das DLL-Formular
Delphi-Quellcode:
PROCEDURE CreateDLL(ACallBack: Pointer);
var
DllForm: TDllForm;
var
gCallBack: procedure = nil;
implementation
{$R *.DFM}
PROCEDURE CreateDLL(ACallBack: Pointer);
BEGIN
IF NOT Assigned(DllForm)
THEN DllForm := TDllForm.Create(NIL);
DllForm.Show;
// Parameter übergeben...
@gCallBack := ACallBack;
END;
procedure TDllForm.FormDestroy(Sender: TObject);
begin
DllForm := NIL;
// CallBack starten
if Assigned(gCallBack) then
gCallBack;
end;
procedure TDllForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
end;
procedure TDllForm.bCloseClick(Sender: TObject);
begin
close;
end;
end.
Muss ich das
DLL Formular noch Releasen ? Alse TForm.Release; Oder was mache ich falsch ?