Maison > développement back-end > C++ > Comment contrôler les noms de fonctions exportés dans les DLL C : décorés ou non ?

Comment contrôler les noms de fonctions exportés dans les DLL C : décorés ou non ?

Patricia Arquette
Libérer: 2024-11-17 01:32:03
original
731 Les gens l'ont consulté

How to Control Exported Function Names in C   DLLs: Decorated vs. Undecorated?

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

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

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!

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