dllexport
, dllimport
Section spécifique à Microsoft
Les attributs de classe de stockage dllexport
et dllimport
sont des extensions propres à Microsoft pour les langages C et C++. Vous pouvez les utiliser pour exporter et importer des fonctions, des données et des objets vers ou depuis une DLL.
Syntaxe
__declspec( dllimport )
declarator
__declspec( dllexport )
declarator
Notes
Ces attributs définissent explicitement l'interface de la DLL à son client, qui peut être un fichier exécutable ou une autre DLL. La déclaration de fonctions comme dllexport
élimine le besoin d’avoir un fichier de définition de module (.def
), au moins en ce qui concerne la spécification des fonctions exportées. L’attribut dllexport
remplace le mot clé __export
.
Si une classe est marquée __declspec(dllexport)
, les spécialisations des modèles de classe dans la hiérarchie de classes sont implicitement marquées comme __declspec(dllexport)
. Cela signifie que les modèles de classe sont instanciés explicitement et que les membres de la classe doivent être définis.
L’attribut dllexport
d’une fonction expose la fonction avec son nom décoré (opération appelée « décoration de nom »). Pour les fonctions C++, le nom décoré inclut des caractères supplémentaires qui encodent les informations de type et de paramètre. Les fonctions C ou les fonctions déclarées comme extern "C"
suivent les règles de décoration de nom du langage C. Pour plus d’informations sur la décoration de nom dans le code C/C++, consultez Noms décorés.
Pour exporter un nom non décoré, vous pouvez établir un lien à l’aide d’un fichier de définition de module (.def
) qui définit le nom non décoré dans une section EXPORTS
. Pour plus d’informations, consultez EXPORTS
. Une autre façon d’exporter un nom non décoré consiste à utiliser une directive #pragma comment(linker, "/export:alias=decorated_name")
dans le code source.
Quand vous déclarez dllexport
ou dllimport
, vous devez utiliser la syntaxe d’attribut étendu et le mot clé __declspec
.
Exemple
// Example of the dllimport and dllexport class attributes
__declspec( dllimport ) int i;
__declspec( dllexport ) void func();
Pour rendre votre code plus lisible, vous pouvez aussi utiliser des définitions de macros :
#define DllImport __declspec( dllimport )
#define DllExport __declspec( dllexport )
DllExport void func();
DllExport int i = 10;
DllImport int j;
DllExport int n;
Pour plus d’informations, consultez l’article suivant :
Définition de fonctions C++ inlined avec
dllexport
etdllimport
Utilisation de
dllimport
et dedllexport
dans les classes C++
FIN de la section spécifique à Microsoft