![]() |
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:
Ich erhalte eine AV beim Lesen von 0x0.
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 vermute ja grob, dass es an EnumWindows() innerhalb der DLL liegt, aber wieso? Danke fürs Erleuchten. Björn. |
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.
|
Re: EnumWindows in DLL mit Callback
Herzlichsten Dank! :bounce2:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:54 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz