Heim >Backend-Entwicklung >C++ >So steuern Sie exportierte Funktionsnamen in C-DLLs: dekoriert oder nicht dekoriert?

So steuern Sie exportierte Funktionsnamen in C-DLLs: dekoriert oder nicht dekoriert?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-17 01:32:03743Durchsuche

How to Control Exported Function Names in C   DLLs: Decorated vs. Undecorated?

C-DLL-Exporte: dekorierte und nicht dekorierte Namen

Beim Exportieren von Funktionen aus einer C-DLL können dekorierte (verstümmelte) Namen auftreten. Dieses Verhalten ergibt sich aus dem Namensmangling-Mechanismus des Compilers zum Auflösen von Symbolnamen in C.

Moduldefinitionsdatei (.def)

Bei Verwendung einer Moduldefinitionsdatei können Sie geben explizit die Namen der exportierten Funktionen an. Der Compiler fügt den exportierten Symbolnamen jedoch weiterhin ein dekoriertes Suffix hinzu. Dies ist die verstümmelte Version des Funktionsnamens, die Informationen zu den Argumenten der Funktion, dem Rückgabetyp und anderen Details enthält.

externer „C“-Export

Funktionen exportieren Die Verwendung der „extern „C““-Syntax verhindert, dass der Compiler die Funktionsnamen verfälscht. Das zusätzliche Suffix nach dem „=" wird jedoch nicht entfernt.

Pragma-Kommentar

Ein alternativer Ansatz zum expliziten Exportieren von Funktionen ist die Verwendung des #pragma-Kommentarlinkers Richtlinie. Mit dieser Direktive können Sie den dekorierten Funktionsnamen angeben, der exportiert werden soll. Zum Beispiel:

#pragma comment(linker, "/EXPORT:SomeFunction=_SomeFunction@@@23mangledstuff#@@@@")

Diese Direktive weist den Linker an, die Funktion „SomeFunction“ mit dem bereitgestellten dekorierten Namen zu exportieren.

FUNCTION Makro

Eine andere Möglichkeit besteht darin, das Makro FUNCTION im Funktionskörper zu verwenden. Dieses Makro wird auf den nicht dekorierten Funktionsnamen erweitert. Sie können dann die Pragma-Kommentardirektive verwenden, um die Funktion mit dem dekorierten Namen wie folgt zu exportieren:

#pragma comment(linker, "/EXPORT:" __FUNCTION__ "=" __FUNCDNAME__)

Mit dieser Technik können Sie den dekorierten Namen angeben, ohne ihn explizit anzugeben.

Von Wenn Sie einen dieser Ansätze befolgen, können Sie die exportierten Funktionsnamen steuern und das unerwünschte „=“ und das dekorierte Suffix vermeiden, das bei Verwendung der .def-Datei oder der „extern „C““-Syntax auftreten kann.

Das obige ist der detaillierte Inhalt vonSo steuern Sie exportierte Funktionsnamen in C-DLLs: dekoriert oder nicht dekoriert?. 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