Définitions ou déclarations (C++)
Spécifique à Microsoft
L'interface DLL fait référence à tous les éléments (fonctions et des données) qui sont connus pour être exportés par un programme dans le système ; autrement dit, tous les éléments déclarés comme dllimport ou dllexport.Toutes les déclarations incluses dans l'interface DLL doivent spécifier dllimport ou l'attribut d' dllexport .Toutefois, la définition doit spécifier uniquement l'attribut d' dllexport .Par exemple, la définition de la fonction suivante génère une erreur de compilation :
__declspec( dllimport ) int func() { // Error; dllimport
// prohibited on definition.
return 1;
}
Ce code génère une erreur :
#define DllImport __declspec( dllimport )
__declspec( dllimport ) int i = 10; // Error; this is a
// definition.
Toutefois, il reste syntaxe correcte :
__declspec( dllexport ) int i = 10; // Okay--export definition
L'utilisation d' dllexport implique une définition, tandis que dllimport implique une déclaration.Vous devez utiliser le mot clé d' extern avec dllexport pour forcer une déclaration ; sinon, une définition est implicite.Par conséquent, les exemples suivants sont corrects :
#define DllImport __declspec( dllimport )
#define DllExport __declspec( dllexport )
extern DllImport int k; // These are both correct and imply a
DllImport int j; // declaration.
les exemples suivants clarifient précéder :
static __declspec( dllimport ) int l; // Error; not declared extern.
void func() {
static __declspec( dllimport ) int s; // Error; not declared
// extern.
__declspec( dllimport ) int m; // Okay; this is a
// declaration.
__declspec( dllexport ) int n; // Error; implies external
// definition in local scope.
extern __declspec( dllimport ) int i; // Okay; this is a
// declaration.
extern __declspec( dllexport ) int k; // Okay; extern implies
// declaration.
__declspec( dllexport ) int x = 5; // Error; implies external
// definition in local scope.
}