Dynamisches laden will nicht :(



  • Hi,

    ich wollte die MessageBoxA-Funktion aus der user32.dll laden, doch das klappt nicht 😞

    #include <windows.h>
    
    typedef int (*msgbox)(HWND, LPCSTR, LPCSTR, UINT);
    
    int __stdcall WinMain (HINSTANCE instance, HINSTANCE prevInstance, char* cmd, int show)
    {
        HMODULE   hDll;
    
        msgbox f1;
    
        hDll = LoadLibrary("user32.dll");
    
        if(hDll==NULL)return -1;
    
        f1 = (msgbox)GetProcAddress(hDll,"MessageBoxA");
    
        if(f1==NULL)
        {
            FreeLibrary(hDll);
            return 0;
        }
        FreeLibrary(hDll);
    
        f1 (NULL, "Hallo", "", MB_OK);
    
        return 0;
    }
    

    Wo liegt der Fehler? 😕



  • er stürzt einfach bei "f1 (NULL, "Hallo", "", MB_OK);" ab 😞



  • Warum verwendest du die Funktion nicht direkt?! Ansonsten: Nach FreeLibrary ist der Funktions-Pointer natürlich ungültig!



  • flenders schrieb:

    Warum verwendest du die Funktion nicht direkt?!

    Weil ich mir irgendeine Funktion rausgesucht habe zum lernen? Muss man sich neuerdings für alles rechtfertigen? zakre...



  • Achja: programm schmiert noch immer einwandfrei ab:

    #include <windows.h>
    
    typedef int (*msgbox)(HWND, LPCSTR, LPCSTR, UINT);
    
    int __stdcall WinMain (HINSTANCE instance, HINSTANCE prevInstance, char* cmd, int show)
    {
        HMODULE   hDll;
    
        msgbox f1;
    
        hDll = LoadLibrary("user32.dll");
    
        if(hDll==NULL)return -1;
    
        f1 = (msgbox)GetProcAddress(hDll,"MessageBoxA");
    
        if(f1==NULL)
        {
            FreeLibrary(hDll);
            return 0;
        }
    
        f1 (NULL, "Hallo", "", MB_OK);
        FreeLibrary(hDll);
    
        return 0; // <<<<<<<<<<<<<<<<<<<<<<<<<<
    }
    

    diesmal jedoch bei return 0;



  • typedef int (__stdcall *msgbox)(HWND, LPCSTR, LPCSTR, UINT);
    

Anmelden zum Antworten