Einzelnen Beitrag anzeigen

Benutzerbild von geskill
geskill

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

Re: Eine DLL freigeben. Mit CallBack

  Alt 29. Jan 2008, 21:25
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.
Sebastian
  Mit Zitat antworten Zitat