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_factorypasst nicht zu deinem Aufruf vonfactory_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