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 de la __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 la plus é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 entre les versions du compilateur. Si vous utilisez __declspec(dllexport), la recompilation des fichiers DLL et .exe dépendants est nécessaire uniquement pour prendre en compte les modifications de convention d’affectation de noms.

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

Pour exporter des fonctions, la __declspec(dllexport) mot clé doit apparaître à gauche de la 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 fonctions membres d’une classe, l’mot clé doit apparaître à gauche du nom de 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