LoadLibrary / GetProcAddress fuer constructor mit parameter



  • Hallo,

    ich habe eine .dll compiliert, die eine Funktion "createModel" exportiert, die einen Pointer des neuen Objekts zurueckliefert:

    extern "C" __declspec(dllexport) Controller* __cdecl createModel(int endTime, int timeStep, char* reportName)
    {
        return new EtaModel(endTime, timeStep, reportName);
    }
    

    Diese .dll wird so ins main.cpp geladen:

    HINSTANCE dll_handle = ::LoadLibrary(TEXT("EtaModel.dll"));
    
       controller_factory factory_func = reinterpret_cast<controller_factory>(GetProcAddress(dll_handle, "createModel"));
    

    Jetzt will ich:

    typedef Controller* (__cdecl *controller_factory)();
    
        Controller* ctrl = factory_func(105560, 600, "ctrl_60.rpt");
    

    bekomme aber beim Compilieren:
    "too many arguments to function"

    Controller* ctrl = factory_func();
    wuerde funktionieren.

    Wo liegt der Denkfehler, oder kann ich dem constructor in der dll auf diese Weise keine Parameter uebergeben?
    Danke



  • Dein Typedef controller_factory passt nicht zu deinem Aufruf von factory_func . Die Signatur deines Typedefs muss der korrekten Signatur entsprechen, d.h. da fehlen die Argumente.

    Edit
    Konkret:

    typedef Controller* (__cdecl *controller_factory)(int,int,char*);
    


  • In deinem typedef "controller_factory" fehlen die Funktionsargumente.
    Das hat nichts mit Konstruktoren zu tun. Der Konstruktor wird dann von deiner exportierten Funktion aufgerufen.

    Machs mal so:

    typedef Controller* (__cdecl *controller_factory)(int, int, char*);
    


  • Theta, Illuminator,

    genau das war falsch!
    Total Super!
    Danke
    kwurpi


Anmelden zum Antworten