Definice a prohlášení (C++)
Konkrétní společnosti Microsoft
Knihovna DLL rozhraní odkazuje na všechny položky (funkce a data), které jsou známy exportovat některým programem v systému. To znamená, že všechny položky, které jsou deklarovány jako dllimport nebo dllexport.Všechny deklarace zahrnuty do knihovny DLL rozhraní je nutné zadat buď dllimport nebo dllexport atributu.Ale definice musí určit pouze dllexport atributu.Například následující definice funkce vygeneruje chybu kompilátoru:
__declspec( dllimport ) int func() { // Error; dllimport
// prohibited on definition.
return 1;
}
Tento kód také vygeneruje chybu:
#define DllImport __declspec( dllimport )
__declspec( dllimport ) int i = 10; // Error; this is a
// definition.
To je však správné syntaxe:
__declspec( dllexport ) int i = 10; // Okay--export definition
Použití dllexport zahrnuje definici, zatímco dllimport zahrnuje prohlášení.Je nutné použít extern klíčové slovo s dllexport vynutit prohlášení; jinak je zahrnuto do definice.Následující příklady jsou tedy správné:
#define DllImport __declspec( dllimport )
#define DllExport __declspec( dllexport )
extern DllImport int k; // These are both correct and imply a
DllImport int j; // declaration.
Následující příklady vyjasnit předchozí:
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.
}