Heim  >  Artikel  >  Backend-Entwicklung  >  Wie exportiere ich C-DLL-Funktionen und vermeide dekorierte/verstümmelte Namen?

Wie exportiere ich C-DLL-Funktionen und vermeide dekorierte/verstümmelte Namen?

Linda Hamilton
Linda HamiltonOriginal
2024-11-13 03:25:02641Durchsuche

How do I Export C   DLL Functions and Avoid Decorated/Mangled Names?

C-DLL-Export: Verzierte/verstümmelte Namen verstehen

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.

Verzierte/verstümmelte Namen

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.

Verwenden des Exports im C-Stil

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.

Lösung

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.

Alternative Lösung

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn