Heim > Artikel > Backend-Entwicklung > Wie exportiere ich C-DLL-Funktionen und vermeide dekorierte/verstümmelte Namen?
Das Erstellen einer C-DLL und das Exportieren ihrer Funktionen ist eine häufige Aufgabe. Allerdings kann es verwirrend sein, zu bestimmen, wie exportierte Namen aussehen.
Beim Exportieren von Funktionen mithilfe einer Moduldefinitionsdatei (MyDLL.def) können Sie verzierte oder verstümmelte Namen wie „ SomeFunction@@@23mangledstuff#@@@@". Dies liegt daran, dass C-Compiler Funktionssymbole dekorieren, indem sie Informationen hinzufügen, die von der C-Laufzeit benötigt werden.
Das Exportieren von Funktionen mithilfe der externen „C“-Syntax __declspec(dllexport) funktioniert die verzierten Namen nicht beseitigen. Es gibt lediglich an, dass die Funktion einen Namen im C-Stil haben soll, die Dekoration bleibt jedoch erhalten.
Um das Problem zu beheben, sollten Sie die Verwendung der Pragma-Direktive in Betracht ziehen:
#pragma comment(linker, "/EXPORT:SomeFunction=_SomeFunction@@@23mangledstuff#@@@@")
Dieses Pragma weist den Linker an, „SomeFunction“ mit dem angegebenen dekorierten Namen zu exportieren.
Alternativ können Sie das folgende Pragma innerhalb des Funktionskörpers verwenden:
#pragma comment(linker, "/EXPORT:\"" __FUNCTION__ "\"=\"" __FUNCDNAME__ "\"")
Dieses Pragma verwendet die Makros FUNCTION und FUNCDNAME, um den Funktionsnamen und den dekorierten Namen automatisch abzurufen.
Durch die Verwendung dieser Pragmas können Sie die Dekoration steuern der exportierten Symbole, um die Kompatibilität sicherzustellen, wenn sie aus anderen Sprachen wie C# aufgerufen werden.
Das obige ist der detaillierte Inhalt vonWie exportiere ich C-DLL-Funktionen und vermeide dekorierte/verstümmelte Namen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!