Exportations de DLL C : noms décorés et non décorés
Lors de l'exportation de fonctions à partir d'une DLL C, vous pouvez rencontrer des noms décorés (mutilés). Ce comportement provient du mécanisme de modification des noms du compilateur pour résoudre les noms de symboles en C .
Fichier de définition de module (.def)
Lorsque vous utilisez un fichier de définition de module, vous spécifient explicitement les noms des fonctions exportées. Cependant, le compilateur ajoute toujours un suffixe décoré aux noms de symboles exportés. Il s'agit de la version modifiée du nom de la fonction, qui comprend des informations sur les arguments de la fonction, le type de retour et d'autres détails.
Extern "C" Export
Exportation de fonctions l'utilisation de la syntaxe "extern "C"" empêche le compilateur de modifier les noms des fonctions. Cependant, il ne supprime pas le suffixe supplémentaire après le "=".
Pragma Comment
Une approche alternative pour exporter explicitement des fonctions consiste à utiliser l'éditeur de liens de commentaires #pragma directif. Cette directive vous permet de spécifier le nom de la fonction décorée à exporter. Par exemple :
#pragma comment(linker, "/EXPORT:SomeFunction=_SomeFunction@@@23mangledstuff#@@@@")
Cette directive demande à l'éditeur de liens d'exporter la fonction "SomeFunction" avec le nom décoré fourni.
FUNCTION Macro
Une autre option consiste à utiliser la macro FUNCTION dans le fichier de la fonction. corps. Cette macro se développe jusqu'au nom de la fonction non décorée. Vous pouvez ensuite utiliser la directive pragma comment pour exporter la fonction avec le nom décoré, comme suit :
#pragma comment(linker, "/EXPORT:" __FUNCTION__ "=" __FUNCDNAME__)
Cette technique permet de spécifier le nom décoré sans le spécifier explicitement.
Par en suivant l'une de ces approches, vous pouvez contrôler les noms de fonctions exportés et éviter le "=" indésirable et le suffixe décoré qui peuvent apparaître lors de l'utilisation du fichier .def ou du "extern "C"" syntaxe.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!