API Funktion mit Assembler aufrufen, Fehler in Parameter bei SetWindowLong()
-
Hallo,
ich möchte eine Fensterunterklasse mit SetWindowLong() erstellen, damit mein Editfeld auf Tastendrücke reagiert.
Hier mal der Code:
mache_edit proc
;######## Erzeugt die Editbox
invoke CreateWindowEx,WS_EX_LEFT,
addr szEdit,
addr szEdittext,
WS_CHILD or WS_VISIBLE or WS_BORDER,
20, 20, 100, 40,
hWnd,NULL,
hInstance,NULL
mov edithwnd, eaxinvoke SetWindowLong, edithwnd,GWL_WNDPROC, sonderadresse
mov sonderaddr, eaxRet
mache_edit EndPich bin mir sicher das der Fehler im letzten Parameter "sonderadresse" liegt.
Habe schon "addr sonderadresse" undmov ebx, offset sonderadresse
invoke SetWindowLong, edithwnd,GWL_WNDPROC, ebx
versucht... Leider stürzt mein Programm immer ab.Wie muss der Parameter auf die neue Prozedur übergeben werden?
MfG
Nicky
-
Was ist den sonderadresse? Du must einen Funktionszeiger übergeben:
WndHook proto hWnd:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM ... .data? pFunc PVOID ? ... invoke SetWindowLong,hWndEdit,GWL_WNDPROC,WndHook mov pFunc,eax ... WndHook proc hWnd:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM .if uMsg == ... ... .else invoke CallWindowProc,pFunc,hWnd,uMsg,wParam,lParam ret .endif xor eax,eax ret WndHook endp
-
BTW: Es bleibt zu hoffen, das du auch die WinABI beachtest ...