Maison >développement back-end >C++ >Comment exporter les fonctions DLL C sans décoration de nom ?
Exportation de noms décorés de DLL C
Vous avez remarqué que lors de l'exportation de noms de fonctions à partir d'une DLL C en utilisant soit une définition de module (.def) ou la syntaxe extern "C" __declspec(dllexport) de style C, les noms de fonctions exportés sont agrémentés d'informations supplémentaires. Cela est dû à la modification du nom C, un processus qui encode les informations sur les paramètres et les types de fonction dans le nom de la fonction.
Pour supprimer cette décoration supplémentaire, vous pouvez utiliser la directive du compilateur de commentaires #pragma. En ajoutant la ligne suivante à votre code :
#pragma comment(linker, "/EXPORT:SomeFunction=_SomeFunction@@@23mangledstuff#@@@@")
Vous pouvez préciser le nom décoré de la fonction que vous souhaitez exporter. Dans ce cas, "SomeFunction@@@23mangledstuff#@@@@" est le nom décoré de la fonction "SomeFunction".
Vous pouvez également utiliser le pragma suivant pour générer automatiquement le nom décoré :
#pragma comment(linker, "/EXPORT:\"" __FUNCTION__ ""= "" __FUNCDNAME__)
Ce pragma utilise la FUNCTION et FUNCDNAME macros pour insérer le nom de la fonction et sa version décorée dans le pragma.
L'utilisation de l'un ou l'autre de ces pragmas entraînera la sortie suivante lorsqu'elle sera visualisée avec dumpbin.exe :
SomeFunction
Cette méthode permet de conserver la fonctionnalité des fonctions exportées tout en supprimant la décoration indésirable dans les noms de fonctions.
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!