Definições e declarações (C++)
Seção específica da Microsoft
A interface da DLL refere-se a todos os itens (funções e dados) que sabidamente são exportados 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 da DLL devem especificar o atributo dllimport
ou dllexport
. No entanto, a definição deve especificar apenas o atributo dllexport
. Por exemplo, a definição de função a seguir gera um erro de compilador:
__declspec( dllimport ) int func() { // Error; dllimport
// prohibited on definition.
return 1;
}
Este código também gera um erro:
__declspec( dllimport ) int i = 10; // Error; this is a definition.
No entanto, esta é uma 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 a palavra-chave extern
com dllexport
para forçar uma declaração; caso contrário, uma definição é implícita. Assim, os seguintes exemplos estão corretos:
#define DllImport __declspec( dllimport )
#define DllExport __declspec( dllexport )
extern DllExport int k; // These are both correct and imply a
DllImport int j; // declaration.
Os exemplos a seguir esclarecem o que foi dito acima:
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.
}
Fim da seção específica da Microsoft
Confira também
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de