Hi,
Grundlegendes Problem:
Ich möchte in einer Callback Funktion auf Methoden/Members einer Klasse
zurückgreifen.
(Dies soll später in einer Komponente geschehen)
Mein Ansatz:
Die Callback Funktion selbst als Methode derselben Klasse machen.
(Im Beispiel EnumWindowsProc)
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| type TfrmMain = class(TForm) published function EnumWindowsProc(wHandle: HWND; LParm: lParam): Bool; stdcall; export; end;
{...}
function TfrmMain.EnumWindowsProc(wHandle: HWND; LParm: lParam): Bool; stdcall; export; begin //... end;
procedure TfrmMain.Button1Click(Sender: TObject); var EnumWindowsProc: TMethod; begin EnumWindowsProc.Data := Pointer(self); EnumWindowsProc.Code := Self.MethodAddress('EnumWindowsProc'); if (EnumWindowsProc.Data <> nil) and (EnumWindowsProc.Code <> nil) then EnumWindows(@EnumWindowsProc, 0); end; |
Problem:
Es kommt eine EAccessViolation beim Ausführen von EnumWindows.
Wer es testen möchte, hier der Code in einem
Testprojekt:
tinyurl.com/ajm5