Sdílet prostřednictvím


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.
}

Viz také

Referenční dokumentace

dllexport dllimport.