sich das Paar von Funktionen unter:Wie erzwinge die Initialisierung einer statischen lokalen Variablen vor dem Hauptterminal?
double MYAPI foo(double x) {
return x;
}
Register register_foo_([] {
return reg(&foo, "foo", ...); // function name repeated used
});
register_foo_
ist eine globale Variable, bevor dllmain
initialisiert, deren Konstruktor nimmt einen Lambda, die den Namen der Funktion darüber wörtlich wiederholt verweist. Es wäre großartig, wenn sich der Registrierungscode innerhalb der obigen Funktion bewegen könnte, um die Wahrscheinlichkeit eines Fehlers zu verringern. Ich habe versucht:
double MYAPI foo(double x) {
static Register register_foo_([] {
return reg(&foo, "foo", ...); // static local does not initialize before dllmain
});
return x;
}
Wenn der obige Code funktioniert, dann kann ich es einfach in ein Makro verwandeln, die Verwendung von __FUNCNAME__
macht. Gibt es eine Möglichkeit, die Initialisierung der statischen lokalen Variablen register_foo_
vor dllmain zu erzwingen?
Wenn Aufruf 'foo' keine unerwünschten Nebenwirkungen hat, können Sie es am Anfang nennen könnte von ' dllmain' – Praetorian
Also im Grunde möchten Sie eine Funktion vor dem Haupt anrufen? Oder bin ich verwirrt worden? – Galik
@Praetorian Was dies zu erreichen versucht, wird automatisch die registrierte Funktion zu verfolgen. Das Aufrufen von Dllmain funktioniert nicht, da ich die Funktionsnamen explizit schreiben muss. –