Maison > développement back-end > C++ > Comment exporter les fonctions DLL C et éviter les noms décorés/mutilés ?

Comment exporter les fonctions DLL C et éviter les noms décorés/mutilés ?

Linda Hamilton
Libérer: 2024-11-13 03:25:02
original
716 Les gens l'ont consulté

How do I Export C   DLL Functions and Avoid Decorated/Mangled Names?

Exportation de DLL C : comprendre les noms décorés/mutilés

Créer une DLL C et exporter ses fonctions est une tâche courante. Cependant, déterminer comment les noms exportés apparaissent peut prêter à confusion.

Noms décorés/mutilés

Lors de l'exportation de fonctions à l'aide d'un fichier de définition de module (MyDLL.def), vous pouvez observer des noms décorés ou mutilés comme " UneFonction@@@23mangledstuff#@@@@". Cela se produit parce que les compilateurs C décorent les symboles de fonction en ajoutant les informations nécessaires à l'exécution C.

Utilisation de l'exportation de style C

L'exportation de fonctions à l'aide de la syntaxe externe "C" __declspec(dllexport) ne pas éliminer les noms décorés. Il précise seulement que la fonction doit avoir un nom de style C, mais la décoration reste.

Solution

Pour résoudre le problème, envisagez d'utiliser la directive pragma :

#pragma comment(linker, "/EXPORT:SomeFunction=_SomeFunction@@@23mangledstuff#@@@@")
Copier après la connexion

Ce pragma demande à l'éditeur de liens d'exporter "SomeFunction" avec le nom décoré spécifié.

Alternative Solution

Vous pouvez également utiliser le pragma suivant dans le corps de la fonction :

#pragma comment(linker, "/EXPORT:\"" __FUNCTION__ "\"=\"" __FUNCDNAME__ "\"")
Copier après la connexion

Ce pragma utilise les macros FUNCTION et FUNCDNAME pour récupérer automatiquement le nom de la fonction et le nom décoré.

En employant ces pragmas, vous pouvez contrôler la décoration des symboles exportés, garantissant la compatibilité lors de leur appel depuis d'autres langages comme C#.

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