problem beim dll erstellen



  • hi
    ich habe angefangen mich mit hooks zu beschäftigen.
    aber als ich meinen ersten hook cmpilieren wollte gab es einen fehler.

    meine ide ist code::blocks mit mingw.

    mein code ist:
    header

    #ifndef _DLL_H_
    #define _DLL_H_
    #include <windows.h>
    HHOOK g_hKeyboardHook= NULL;
    HINSTANCE g_hInst= NULL;
    BOOL InstallHook();
    BOOL UninstallHook();
    LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam);
    #endif /* _DLL_H_ */
    

    cpp datei

    #include "Keyboardhook.h"
    #include<iostream>
    
    extern "C" 
    BOOL APIENTRY DllMain (HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved){
        g_hInst=hinstDLL;
        return TRUE;
    }
    
     BOOL InstallHook(){
        if(g_hKeyboardHook != NULL){
        	return TRUE;
    	};
    	g_hKeyboardHook = SetWindowsHookEx(WH_KEYBOARD, KeyboardProc, g_hInst, 0);
    
    	if(g_hKeyboardHook == NULL){
    		return FALSE;
    	};
        return TRUE;
    };
    
     BOOL UninstallHook(){
    	if(g_hKeyboardHook != NULL)
    	{
    		UnhookWindowsHookEx(g_hKeyboardHook);
    		g_hKeyboardHook = NULL;
    	};
    	return TRUE;
    };
    
    LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam){
    
    	if (nCode < 0)
    		return CallNextHookEx(g_hKeyboardHook, nCode, wParam, lParam);
    
    	if(nCode == HC_ACTION)
    	{
    		std::cout<<wParam<<"\n";
    	};
    	return CallNextHookEx(g_hKeyboardHook, nCode, wParam, lParam);
    };
    

    die fehlerausgabe ist:

    ||=== HOOK, Debug ===|
    C:\MinGW\bin\..\lib\gcc\mingw32\3.4.5\..\..\..\libmingw32.a(main.o):main.c undefined reference to `WinMain@16'|
    ||=== Build finished: 1 errors, 0 warnings ===|
    

    ist etwas am code falsch?
    muss ich etwas bestimmtes beachten? (z.b. habe ich in einem forum das mit extern "C" gelesen. hat bei mir aber nicht geholfen bzw den neuen fehler hervorgebracht.)

    schonmal danke für hilfe



  • Du hast offensichtlich eingestellt, dass du eine exe erstellen willst, keine dll (daher sucht er nach WinMain).



  • Hi, ich benutze auch Code::Blocks.

    Um eine .dll zu erstellen:

    Project -> Properties... -> Build targets

    Unter "Selected build target options" bei "Type" die "Dynamic library" auswählen.

    LG
    Michi



  • @PLM
    danke jetzt klappt es

    //edit

    da ich die funktionen auch außerhalb der dll benutzen will habe ich folgenden teil eingefügt.

    in
    hook.h

    #if BUILDING_DLL
    # define DLLIMPORT __declspec (dllexport)
    #else 
    # define DLLIMPORT __declspec (dllimport)
    #endif
    

    und ich habe

    BOOL InstallHook();
    BOOL UninstallHook();
    

    durch

    DLLIMPORT BOOL InstallHook();
    DLLIMPORT BOOL UninstallHook();
    

    ersetzt.

    allerdings bekomme ich nun diese fehler

    F:\proggen\workspaces\c++\codeblocks\HOOK\Keyboardhook.cpp|10|error: function `BOOL InstallHook()' definition is marked dllimport.|
    F:\proggen\workspaces\c++\codeblocks\HOOK\Keyboardhook.cpp|22|error: function `BOOL UninstallHook()' definition is marked dllimport.|
    ||=== Build finished: 2 errors, 0 warnings ===|
    

    kann mir jemand sagen was ich falsch mache?



  • Hi

    Warum hast du es dann ersetzt wenn du auch so nicht weist wie es gehen soll.
    Beschäftige dich mal wie man eine DLL erstellt. Dann kommst du von selbst drauf.

    lowbyte


Anmelden zum Antworten