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, eax

    invoke SetWindowLong, edithwnd,GWL_WNDPROC, sonderadresse
    mov sonderaddr, eax

    Ret
    mache_edit EndP

    ich bin mir sicher das der Fehler im letzten Parameter "sonderadresse" liegt.
    Habe schon "addr sonderadresse" und

    mov 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 ...


Anmelden zum Antworten