Exportação de uma DLL usando __declspec(dllexport)

Microsoft introduzida __export na versão de 16 bits de compilador do Visual C++ para permitir que o compilador gerar os nomes de exportação automaticamente e colocá-los em um arquivo. lib. Este arquivo. lib, em seguida, pode ser usado como um. lib estática para vincular-se com uma DLL.

Em versões mais recentes do compilador, você pode exportar dados, funções, classes ou funções de membro de classe DLL que usa o __declspec(dllexport) palavra-chave. __declspec(dllexport) adiciona a diretiva de exportação para o arquivo de objeto, portanto você não precisa usar um arquivo. def.

Essa conveniência fica mais aparente quando tentar exportar decorado nomes de função do C++. Porque não há nenhuma especificação padrão para decoração de nome, o nome de uma função exportada pode mudar entre as versões do compilador. Se você usar __declspec(dllexport), recompilar a DLL e. exe dependente é necessário apenas à conta que quaisquer alterações de convenção de nomenclatura.

Muitos exportar diretivas, como, por exemplo, números ordinais, NONAME e particular, que podem ser feitas somente em um arquivo. def e não há nenhuma maneira de especificar esses atributos sem um arquivo. def. No entanto, usando __declspec(dllexport) para além de usar um. def arquivo não causa erros de compilação.

Para exportar funções, o __declspec(dllexport) palavra-chave deve aparecer à esquerda da palavra-chave da convenção de chamada, se uma palavra-chave for especificada. For example:

__declspec(dllexport) void __cdecl Function1(void);

Para exportar todos os membros de dados públicos e as funções de membro em uma classe, a palavra-chave deve aparecer à esquerda do nome da classe da seguinte maneira:

class __declspec(dllexport) CExampleExport : public CObject
{ ... class definition ... };
ObservaçãoObservação

__declspec(dllexport)não pode ser aplicado a uma função com o __clrcall chamando convenção.

Ao criar sua DLL, você normalmente cria um arquivo de cabeçalho que contém as classes que você estiver exportando e adicionar e/ou protótipos de função __declspec(dllexport) para as declarações no arquivo de cabeçalho. Para tornar seu código mais legível, definir uma macro para __declspec(dllexport) e usar a macro com cada símbolo que você está exportando:

#define DllExport   __declspec( dllexport ) 

__declspec(dllexport) armazenamentos funcionarem nomes na tabela de exportação da DLL. Se você deseja otimizar o tamanho da tabela, consulte Funções de exportação de uma DLL pelo Ordinal em vez de por nome de.

ObservaçãoObservação

Ao portar o código-fonte DLL do Win16 para Win32, substituir cada ocorrência de __export com __declspec(dllexport).

Como referência, pesquise o arquivo de cabeçalho do Win32 WinBase. Ele contém exemplos de __declspec(dllimport) uso.

O que você deseja fazer?

O que você deseja saber mais a respeito?

Consulte também

Conceitos

Exportação de uma DLL