Compartilhar via


Definições e declarações (C++)

Específicos do Microsoft

A interface DLL refere-se a todos os itens (funções e dados) que são conhecidos por ser exportado por algum programa no sistema; ou seja, todos os itens que são declarados como dllimport ou dllexport.Todas as declarações incluídas na interface DLL devem especificar o dllimport ou dllexport atributo.No entanto, a definição deve especificar somente o dllexport atributo.Por exemplo, a seguinte definição de função gera um erro do compilador:

__declspec( dllimport ) int func() {   // Error; dllimport
                                    // prohibited on definition.
   return 1;
}

Esse código também gera um erro:

#define DllImport   __declspec( dllimport )

__declspec( dllimport ) int i = 10;  // Error; this is a
                                     // definition.

No entanto, esta é a sintaxe correta:

__declspec( dllexport ) int i = 10;     // Okay--export definition

O uso de dllexport implica uma definição, enquanto dllimport implica uma declaração.Você deve usar o extern palavra-chave com dllexport para forçar uma declaração; Caso contrário, uma definição está implícito.Assim, os exemplos a seguir estão corretos:

#define DllImport   __declspec( dllimport )
#define DllExport   __declspec( dllexport )

extern DllImport int k; // These are both correct and imply a
DllImport int j;        // declaration.

Os exemplos a seguir esclarecer anterior:

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

Consulte também

Referência

dllexport, dllimport