kann dll nicht laden



  • Hallo C++ Profis,

    ich versuche schon seit Tagen eine Message-Box per dll aufzurufen. Klappt nicht.
    Tutorials und FAQ schon gelesen. Hilft nicht. Offenbar Hopfen und Malz verloren.
    Wie geht das denn nun ???? Mit folgendem Programm versuche ich die DLL aufzurufen:

    //main.cpp
    #include <windows.h>
    typedef void(* HelloWorldPROC)();
    int WINAPI WinMain (HINSTANCE hinst,
                        HINSTANCE hInstPrev,
                        LPSTR lpCmdLine,
                        int nCmdShow)
    {
        HMODULE hMyLib;
        HelloWorldPROC pfnHelloWorld = NULL; 
        hMyLib = LoadLibrary("CDLL.dll");
        pfnHelloWorld = (HelloWorldPROC)GetProcAddress(hMyLib,"_HelloWorld");
        pfnHelloWorld();
        FreeLibrary(hMyLib);
        return 0;
    }
    

    Die dll soll folgende Funktion enthalten:

    DLLEXPORT void HelloWorld ()
    {
        MessageBox (GetActiveWindow(), "Hello World from DLL!\n", "Hi",
         MB_ICONINFORMATION);
    }
    

    Entweder es hagelt Fehlermeldungen oder es gibt keine Fehlermeldung, jedoch poppt dann das Fenster nicht auf. Kann mir jemand helfen ? Danke



  • 1. Rückgabewert von LoadLibrary testen
    2. Rückgabewert von GetProcAddress testen
    3. Mit DependencyWalker den Funktionsnamen checken, ob die Funktion wirklich als "_HelloWorld" exportiert wurde



  • Vielen Dank. Soweit bin ich noch nicht. Ein kleines Beispiel würde helfen.



  • hMyLib = LoadLibrary("CDLL.dll");
    if(hMyLib == NULL)
    {
       // Fehlermeldung ausgeben
    }
    
    pfnHelloWorld = (HelloWorldPROC)GetProcAddress(hMyLib,"_HelloWorld");
    
    if(pfnHelloWorld == NULL)
    {
       // Fehlermeldung ausgeben
    }
    

    DependencyWalker bekommst du hier: http://www.dependencywalker.com/

    Dort die DLL einladen und gucken wie der Funktionsname wirklich heißt.



  • Super ! Ich werde mir das am Wochenende nochmal in Ruhe ansehen. Melde mich dann, ob und wie es geklappt hat.



  • .... war HelloWorld und nicht _HelloWorld. Nochmals Dank.


Anmelden zum Antworten