Maison > développement back-end > C++ > Comment exporter les fonctions DLL C sans décoration de nom ?

Comment exporter les fonctions DLL C sans décoration de nom ?

Mary-Kate Olsen
Libérer: 2024-11-27 16:07:14
original
870 Les gens l'ont consulté

How to Export C   DLL Functions without Name Decoration?

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#@@@@")
Copier après la connexion

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__)
Copier après la connexion

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
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal