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

__declspec
Palavras-chave