Einzelnen Beitrag anzeigen

Benutzerbild von Björn Ole
Björn Ole

Registriert seit: 10. Jul 2008
166 Beiträge
 
Delphi XE Professional
 
#1

EnumWindows in DLL mit Callback

  Alt 26. Aug 2009, 18:22
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.
  Mit Zitat antworten Zitat