dllexport
, dllimport
Seção específica da Microsoft
Os atributos de classe de armazenamento dllexport
e dllimport
são extensões específicas da Microsoft para as linguagens C e C++. É possível usá-las para exportar e importar funções, dados e objetos para ou a partir de um DLL.
Sintaxe
__declspec( dllimport )
declarator
__declspec( dllexport )
declarator
Comentários
Esses atributos definem explicitamente a interface da DLL para seu cliente, que pode ser o arquivo executável ou outro DLL. Declarar funções como dllexport
elimina a necessidade de um arquivo de definição de módulo (.def
), pelo menos em relação à especificação de funções exportadas. O atributo dllexport
substitui a palavra-chave __export
.
Se uma classe está marcada como __declspec(dllexport)
, todas as especializações de modelos de classe na hierarquia de classe são marcadas implicitamente como __declspec(dllexport)
. Isso significa que os modelos de classe são instanciados explicitamente e que os membros da classe precisam ser definidos.
dllexport
de uma função expõe a função com seu nome decorado, às vezes conhecido como "desconfiguração de nome". Para funções C++, o nome decorado inclui caracteres extras que codificam informações de tipo e parâmetro. Funções ou funções em C que são declaradas como extern "C"
seguem as regras de decoração de nome em C. Para obter mais informações sobre a decoração de nome no código C/C++, confira Nomes decorados.
Para exportar um nome não decorado, você pode vincular usando um arquivo de Definição de Módulo (.def
) que define o nome não decorado em uma seção EXPORTS
. Para obter mais informações, consulte EXPORTS
. Outra maneira de exportar um nome não decorado é usar uma diretiva #pragma comment(linker, "/export:alias=decorated_name")
no código-fonte.
Ao declarar dllexport
ou dllimport
, você precisa usar a sintaxe de atributo estendido e a palavra-chave __declspec
.
Exemplo
// Example of the dllimport and dllexport class attributes
__declspec( dllimport ) int i;
__declspec( dllexport ) void func();
Como alternativa, para tornar seu código mais legível, você pode usar definições de macro:
#define DllImport __declspec( dllimport )
#define DllExport __declspec( dllexport )
DllExport void func();
DllExport int i = 10;
DllImport int j;
DllExport int n;
Para saber mais, veja:
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