[Erledigt] asm dll in winanwendung benutzen.



  • Hi, ich habe eine dll in assembler, die ich gerne in einem cpp benutzen würde.

    der asm-code der dll:

    .386
    .model flat,stdcall
    option casemap:none
    include windows.inc
    include kernel32.inc
    includelib kernel32.lib
    include user32.inc
    includelib user32.lib
    
    c_BarrierX equ 800
    c_winXtolerance equ 75
    c_winYtolerance equ 75
    WM_MOUSEHOOK equ WM_USER + 6
    
    .data
    hInstance dd 0
    
    .data?
    hHook dd ?
    hWnd dd ?
    
    .code
    DllEntry proc hInst:HINSTANCE, reason:DWORD, reserved1:DWORD
    	push hInst
    	pop hInstance
      mov  eax,TRUE
      ret
    DllEntry Endp
    
    MouseProc proc nCode:DWORD,wParam:DWORD,lParam:DWORD
    	assume edx:PTR MOUSEHOOKSTRUCT
    
      invoke PostMessage,hWnd,WM_MOUSEHOOK, wParam, lParam
    
    	mov edx,lParam
    
      invoke CallNextHookEx,hHook,nCode,wParam,lParam
    
      xor eax, eax
      xor edx, edx
    	assume edx:nothing
    	ret
    MouseProc endp
    
    InstallHook proc hwnd:DWORD, targetThread:DWORD
    	push hwnd
    	pop hWnd
    	invoke SetWindowsHookEx,WH_MOUSE,addr MouseProc,hInstance,targetThread
    	mov hHook,eax
    	ret 
    InstallHook endp
    
    UninstallHook proc
    	invoke UnhookWindowsHookEx,hHook
    	ret
    UninstallHook endp
    
    End DllEntry
    

    die def-datei:

    LIBRARY MouseHookDLL
    EXPORTS 
    MouseProc
    InstallHook
    UninstallHook
    

    und die assembler/Linker Befehle:

    %BINDIR%\Ml.exe /nologo /c /coff /Cp /I%INCLUDE% %HOOKDLL%.asm
    if errorlevel 1 goto errasm
    %BINDIR%\Link.exe /nologo /SECTION:.bss,S /SUBSYSTEM:WINDOWS /LIBPATH:%LIBS% /DLL /DEF:%HOOKDLL%.def %HOOKDLL%.obj
    if errorlevel 1 goto errlink
    

    das Bauen funktioniert, es wird eine dll und eine lib erstellt.

    Ich schaff es aber nicht die dll einzubinden.
    in den projekteinetellungen habe ich die lib eingebunden.

    im cpp code habe ich foilgende forwardeklarationen:

    extern DWORD WINAPI InstallHook(HWND msgReceiver, DWORD threadIDToHook);
    extern void WINAPI UninstallHook();
    

    Hoffe jemand von euch hat nen Tip, warum der Linker die Symbole im Code nicht auflösen kann.



  • Ich glaube wenn du einen C++ Compiler verwendest, solltest du die Funktionen die du von der *.dll importierst mit exter "C" statt nur "extern" deklarieren.



  • 🙄
    Ich Trottel!
    Danke, jett gehts


Anmelden zum Antworten