Einzelnen Beitrag anzeigen

Benutzerbild von geskill
geskill

Registriert seit: 17. Feb 2007
Ort: NRW
420 Beiträge
 
Delphi 2010 Professional
 
#9

Re: Eine DLL freigeben. (CallBack)

  Alt 30. Jan 2008, 11:08
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 ?
Angehängte Dateien
Dateityp: zip dlldynamisch_520.zip (331,2 KB, 0x aufgerufen)
Sebastian
  Mit Zitat antworten Zitat