Heim >Backend-Entwicklung >C++ >Wie exportiere ich C-DLL-Funktionen ohne Namensdekoration?
Export von dekorierten C-DLL-Namen
Sie haben festgestellt, dass beim Exportieren von Funktionsnamen aus einer C-DLL unter Verwendung einer Moduldefinition (.def) Datei oder der externen „C“ __declspec(dllexport)-Syntax im C-Stil werden die exportierten Funktionsnamen mit zusätzlichen Informationen versehen. Dies liegt an der C-Namensverzerrung, einem Prozess, der Informationen über Funktionsparameter und -typen in den Funktionsnamen kodiert.
Um diese zusätzliche Dekoration zu entfernen, können Sie die Kommentar-Compiler-Direktive #pragma verwenden. Indem Sie die folgende Zeile zu Ihrem Code hinzufügen:
#pragma comment(linker, "/EXPORT:SomeFunction=_SomeFunction@@@23mangledstuff#@@@@")
Sie können den dekorierten Namen für die Funktion angeben, die Sie exportieren möchten. In diesem Fall ist „SomeFunction@@@23mangledstuff#@@@@“ der dekorierte Name für die Funktion „SomeFunction“.
Alternativ können Sie das folgende Pragma verwenden, um den dekorierten Namen automatisch zu generieren:
#pragma comment(linker, "/EXPORT:\"" __FUNCTION__ ""= "" __FUNCDNAME__)
Dieses Pragma verwendet die FUNCTION und FUNCDNAME Makros zum Einfügen des Funktionsnamens und seiner dekorierten Version in das Pragma.
Die Verwendung eines dieser Pragmas führt bei der Anzeige mit dumpbin.exe zur folgenden Ausgabe:
SomeFunction
Mit dieser Methode können Sie die Funktionalität exportierter Funktionen beibehalten und gleichzeitig unerwünschte Verzierungen in den Funktionsnamen entfernen.
Das obige ist der detaillierte Inhalt vonWie exportiere ich C-DLL-Funktionen ohne Namensdekoration?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!