Das Projekt in eine DLL kompiliert wird, um in ein ausführbares injiziert werdenVerzögerung der Aufbau eines statischen Elementobjekt
Das Projekt auf eine API stützt, die ganz am Anfang in main() wie so initialisiert wird:
int DLL_main()
{
TheApi::Initialize();
AnObject anObjectInstance;
//..
}
Es ist ein Objekt, das mit einer Klassendefinition ähnlich wie diese aufgebaut ist:
class AnObject()
{
AnObject();
~AnObject();
static ApiHelper apiHelperObject; //This object assists in making certain api features easier to use
}
//Inside AnObject.cpp
ApiHelper AnObject::apiHelperObject;
im Konstruktor von apiHelperObject
, gibt es einige API-Funktion aufruft
Nach Injektion der dll, passiert nichts (keine Fehlermeldung auch) aber , wenn das statische Schlüsselwort aus apiHelperObject
entfernt wird alles funktioniert gut
Das Problem scheint zu sein, dass das statische Element ist wobei konstruiert vor die API
initialisiert Es ist nicht möglich TheApi::Initialize()
in apiHelperObject
‚s Konstruktor zu nennen, weil es mehrere verschiedene api Hilfsobjekte sind, und das würde TheApi::Initialize()
dazu führen, mehr als einmal aufgerufen werden
Und so ist die Frage:
Was ist der beste Weg, um die api vor dem statischen Member-Objekt der Initialisierung aufgebaut ist? Oder, was ist der beste Weg, um die Konstruktion des statischen Elements zu verzögern?
Vorzugsweise wird ein Zeiger nicht verwendet, da die Syntax nicht besonders
begünstigtDanke
_ "Das Problem scheint zu sein, dass das statische Element erstellt wird, bevor die API initialisiert wird" _ Warum sollte es nicht sein? Es ist Namespace-statisch. Es wird initialisiert, bevor etwas anderes passiert. Beenden Sie die Verwendung von Initialisierungsfunktionen und verwenden Sie Konstruktoren ordnungsgemäß. –
Entschuldigung für den Typ-o, es war nicht beabsichtigt, eine Funktion Erklärung, bearbeitet werden. Die API gehört mir nicht, die Initialisierungsfunktion muss aufgerufen werden – linko13