MinGW kompilliert Dll, Entrypoint wird aber nicht gecallt



  • Hallo,

    Ich benutze Bloodshed Dev-CPP, mit MinGW.

    Aufgrund eines KeyboardHookings habe ich eine Dll geschrieben, leider wird mittels LoadLibrary der entrypoint nicht gecallt. Mittels VC++2008 funktionierte das wiederum.

    Hier mal der Source der Dll

    #define _WIN32_WINNT 0x0502
    #include <windows.h>
    #include "hookdll.h"    /* -> Siehe Oben */
    
    // Weise den Compiler an, die Variable hWindow in einem
    // separaten Abschnitt namens Shared unterzubringen
    // Darüber hinaus ist dann auch noch dem Linker mitzuteilen,
    // dass die Daten in diesem Abschnitt von allen Instanzen
    // dieser Anwendung gemeinsam verwendet werden sollen.
    // Ganz wichtig dabei ist, dass die Variablen initialisiert
    // sein müssen.
    
    #define SHARED __attribute__((section(".shr"), shared))
    HWND SHARED hWindow = 0 ;
    HHOOK SHARED       hhkHook =0 ;
    HINSTANCE SHARED   hDllInstance =0; ;
    
    // Weise den Compilern, den Abschnitt Shared als lesbar,
    // beschreibbar und zur gemeinsamen Verwendung zu deklarieren - "RSW".
    
    LRESULT CALLBACK KeyboardHookProc (int, WPARAM, LPARAM) ;
    // Der Prototyp der Funktion KeyboardHookProc
    
    // Definition globaler Variablen
    
    /************************************************************************/
    /* DllMain: wird automatisch aufgerufen, wenn die DLL mit LoadLibrary() */
    /*          geladen, oder mit FreeLibrary wieder freigegeben wird.      */
    /* Eingabe Parameter: Systemspezifische Daten                           */
    /* Return-Wert: TRUE                                                    */
    /************************************************************************/
    
    EXPORT BOOL WINAPI DllMain (HINSTANCE hInstance, DWORD fdwReason, PVOID pvReserved){
    
        MessageBox(HWND_DESKTOP,"blub\n","",IDOK);
        switch (fdwReason){
            case DLL_PROCESS_ATTACH :
                // Die DLL wird in den Adressraum des aktuellen Prozesses
                // eingeblendet.
                hDllInstance = hInstance ;
                // Initialisierung der globalen Variable
                break ;
        }  
        return TRUE ;
    }
    

    Selbst das umschreiben der fkt DllMain in

    BOOL APIENTRY DllMain(...
    

    wollte nicht helfen.

    mit einem fkt.pointer waren die anderen Funktionen aufrufbar, woran kann das liegen??

    (Da es hier ein explizites problem mit MinGW respektive Dev-Cpp geht bitte net nach WINAPI verschieben)

    gruß und dank


Anmelden zum Antworten