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.