Exportation à partir d'une DLL à l'aide de __declspec(dllexport)

Vous pouvez exporter des données, des fonctions, des classes ou des fonctions membres de classe à partir d’une DLL à l’aide du __declspec(dllexport) mot clé . __declspec(dllexport) ajoute la directive d’exportation au fichier objet afin que vous n’ayez pas besoin d’utiliser un fichier .def.

Cette commodité est particulièrement évidente lorsque vous essayez d’exporter des noms de fonctions C++ décorés. Étant donné qu’il n’existe aucune spécification standard pour la décoration de noms, le nom d’une fonction exportée peut changer d’une version du compilateur à l’autre. Si vous utilisez __declspec(dllexport), la recompilation de la DLL et des fichiers .exe dépendants est nécessaire uniquement pour prendre en compte les modifications apportées à la convention de nommage.

De nombreuses directives d’exportation, telles que les ordinaux, NONAME et PRIVATE, ne peuvent être effectuées que dans un fichier .def, et il n’existe aucun moyen de spécifier ces attributs sans fichier .def. Toutefois, l’utilisation __declspec(dllexport) en plus d’un fichier .def ne provoque pas d’erreurs de génération.

Pour exporter des fonctions, le __declspec(dllexport) mot clé doit apparaître à gauche du mot clé de convention d’appel, si un mot clé est spécifié. Par exemple :

__declspec(dllexport) void __cdecl Function1(void);

Pour exporter tous les membres de données publiques et les fonctions membres d’une classe, le mot clé doit apparaître à gauche du nom de la classe comme suit :

class __declspec(dllexport) CExampleExport : public CObject
{ ... class definition ... };

Remarque

__declspec(dllexport) ne peut pas être appliqué à une fonction avec la convention d’appel __clrcall .

Lors de la génération de votre DLL, vous créez généralement un fichier d’en-tête qui contient les prototypes de fonction et/ou les classes que vous exportez et ajoutez __declspec(dllexport) aux déclarations dans le fichier d’en-tête. Pour rendre votre code plus lisible, définissez une macro pour __declspec(dllexport) et utilisez la macro avec chaque symbole que vous exportez :

#define DllExport   __declspec( dllexport )

__declspec(dllexport) stocke les noms de fonction dans la table d’exportation de la DLL. Si vous souhaitez optimiser la taille de la table, consultez Exportation de fonctions à partir d’une DLL par ordinal plutôt que par nom.

Que voulez-vous faire ?

Sur quels éléments souhaitez-vous obtenir des informations supplémentaires ?

Voir aussi

Exportation à partir d'une DLL