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!