DLLs aufrufen und dessen Funktionen ausführen



  • Cool! Danke "pub00515"! 🙂

    Hat funktioniert und war super leicht!

    Gruß LukasBanana



  • Da empfiehlt sich auch ein typedef zu verwenden. Macht die ganze Sache übersichtlicher 😉 .



  • CodeFinder schrieb:

    Da empfiehlt sich auch ein typedef zu verwenden. Macht die ganze Sache übersichtlicher 😉 .

    Vielleicht so?

    typedef extern "C" __declspec(dllexport) DLLexport;
    

    Gruß LukasBanana



  • Nee dafür benutzt Du besser ein #define.

    Also

    #define DLLEXPORT __declspec(dllexport)
    

    Was Codefinder vermutlich meint, sind typedefs für die Funktionspointer.
    z.B.

    typedef void (*voidfunc)();
    

    Dann kannst Du schreiben:

    voidfunc pfunc = (voidfunc) GetProcAddress(...)
    

    macht die Sache wesentlich übersichtlicher wenn der Prototyp länger wird. Oder man es oft benutzt :-).



  • Hehe, ne so (sry, hätte das Bsp sofort posten sollen):

    typedef void (*PFUNCTION)(void); // 'PFUNCTION' wird jetzt wie ein Typ behandelt, also bspw. wie int
    HMODULE hDLL = LoadLibrary(TEXT("Dllname.dll")); // DLL laden
    if(hDLL != NULL) // Prüfen, ob DLL erfolgreich geladen werden konnte
    {
       // Funktionszeiger-Variable anlegen und Adresse der Funktion in der DLL ermitteln:
       PFUNCTION pFunction = reinterpret_cast<PFUNCTION>(GetProcAddress(hDLL, "test"));
       if(pFunction != NULL) // Wichtig: Konnte die Adresse der Funktion erfolgreich ermittelt werden ? Falls nein, darf die Funktion nicht aufgerufen werden, sonst würde es hier eine Access-Violation geben!
          pFunction(); // Erfolgreich ermittelt, also aufrufen!
    }
    


  • Also so:

    /* ... */
    typedef (void (*)()) voidfunc;
    typedef (int (*)()) intfunc;
    typedef (float (*)()) floatfunc;
    /* ... */
    void (*MyFunc)() = voidfunc GetProcAddress(hDLL, "MyDLLFunction");
    

    Gruß LukasBanana



  • @pub00515: Jupp genau 👍 .



  • LukasBanana schrieb:

    Also so:

    /* ... */
    typedef (void (*)()) voidfunc;
    typedef (int (*)()) intfunc;
    typedef (float (*)()) floatfunc;
    /* ... */
    void (*MyFunc)() = voidfunc GetProcAddress(hDLL, "MyDLLFunction");
    

    Gruß LukasBanana

    Ne der Name des Typs muss direkt dem '*' folgen.
    ➡

    /* ... */
    typedef (void (*voidfunc)());
    typedef (int (*intfunc)();
    typedef (float (*floatfunc)());
    /* ... */
    
    voidfunc MyFunctionPointer;
    MyFunctionPointer = (voidfunc)GetProcAddress(hDLL, "MyDLLFunction");
    

    Siehe auch mein Beispiel oben.



  • Achso, danke ich hab`s jetzt glaub ich kappiert! 👍
    Danke an alle 🙂

    Gruß LukasBanana


Anmelden zum Antworten