Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi EnumWindows in DLL mit Callback (https://www.delphipraxis.net/139326-enumwindows-dll-mit-callback.html)

Björn Ole 26. Aug 2009 18:22


EnumWindows in DLL mit Callback
 
Servus,


ich bin gerade sprachlos, warum funktioniert dieser simple Callback Aufruf aus der DLL nicht?
Wenn ich den Code der DLL in die Hauptanwendung schmeiße, läuft alles.


Formular
Delphi-Quellcode:
function DoEnum(Ptr: Pointer): integer; external 'test.dll';

implementation

procedure AddInt(i: integer);
begin
  frmMain.ListBox.Items.Add(IntToStr(i));
end;

procedure TfrmMain.ButtonClick(Sender: TObject);
begin
  DoEnum(@AddInt);
end;

DLL
Delphi-Quellcode:
type
  TFunc = procedure(i: integer);

var
  CallBack: TFunc;

function EnumWindowsProc(wHandle: Cardinal; lParam: integer): boolean; stdcall;
begin
  result := true;
  CallBack(wHandle);
end;

function DoEnum(Ptr: Pointer): integer; stdcall;
begin
  result := 0;
  if Assigned(Ptr) then
  begin
    CallBack := Ptr;
    EnumWindows(@EnumWindowsProc, 0);
  end;
end;

exports
  DoEnum;
Ich erhalte eine AV beim Lesen von 0x0.
Ich vermute ja grob, dass es an EnumWindows() innerhalb der DLL liegt, aber wieso?

Danke fürs Erleuchten.
Björn.

Apollonius 26. Aug 2009 18:30

Re: EnumWindows in DLL mit Callback
 
Die Aufrufkonvention von DoEnum differiert zwischen DLL und Hauptprogramm. In der DLL verwendest du stdcall, im Hauptprogramm register. Die Aufrufkonvention ist vollkommen egal, aber es muss überall die selbe sein.

Björn Ole 26. Aug 2009 18:35

Re: EnumWindows in DLL mit Callback
 
Herzlichsten Dank! :bounce2:


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:18 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz