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.
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.
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.
Pour résoudre le problème, envisagez d'utiliser la directive pragma :
#pragma comment(linker, "/EXPORT:SomeFunction=_SomeFunction@@@23mangledstuff#@@@@")
Ce pragma demande à l'éditeur de liens d'exporter "SomeFunction" avec le nom décoré spécifié.
Vous pouvez également utiliser le pragma suivant dans le corps de la fonction :
#pragma comment(linker, "/EXPORT:\"" __FUNCTION__ "\"=\"" __FUNCDNAME__ "\"")
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!