Zitat:
der WndProcDispatcher braucht doch sicherlich dieselben Parameter, wie MyWndProc oder ?
Nein, auf gar keinen Fall. Er hat zwar diese Aufrufparamter aber du solltest sie NICHT deklarieren. Es ist dann nämlich durchaus möglich das der Compiler einen Stackframe, auch für den Assemblercode, anlegt. Da wir im Assemblerpart direkt den Stack manipulieren würde dies zu Abstürtzen führen. Also: WindowProcDispatcher so lassen wie er ist.
Zitat:
function MyWndProc(hWnd: HWND; Msg: WORD; wParam: WPARAM; lParam: LPARAM; Memory: PHookData): lResult; stdcall;
Ist richtig, da unser WindowProcDispatcher() ja den letzten Parameter Memory in die Parameterlist hinzufügt.
Zitat:
Memory.SetWindowLong(Memory.hWnd, gwl_WindowProc, @Memory.WndProcDispatcher); ?
Richtig. Oder besser,
Memory.SetWindowLong(Memory.hWnd, gwl_WindowProc, Memory);
da im letzten meiner Beispiele der Dispatcher am Anfang von Memory steht.
Gruß Hagen