Exportando de uma DLL usando __declspec(dllexport)
Microsoft introduzida __export a versão do compilador de 16 bits do Visual C++ para permitir que o compilador gerar automaticamente nomes de exportação e colocá-los em um arquivo. lib.Este arquivo. lib, em seguida, pode ser usado como um. lib estática para vincular com uma DLL.
Em versões mais recentes do compilador, você pode exportar dados, funções, classes ou funções de membro de classe de uma DLL usando 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 é mais evidente 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 alterar entre versões do compilador.Se você usar __declspec(dllexport), recompilar o DLL e. exe dependentes é necessário apenas a conta para as alterações de convenção de nomenclatura.
Muitos Exportar diretivas, como ordinais, NONAME e particulares, podem ser feitas apenas em um arquivo. def e não há nenhuma maneira de especificar esses atributos sem um arquivo. def.No entanto, usando __declspec(dllexport) além de ser usado 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 de convenção de chamada, se for especificada uma palavra-chave.Por exemplo:
__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ção |
---|
__declspec(dllexport)não pode ser aplicado a uma função com o __clrcall convenção de chamada. |
Ao criar sua DLL, você normalmente cria um arquivo de cabeçalho que contém os protótipos de função e/ou classes está exportando e adicionar __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ção |
---|
Ao portar o código-fonte do DLL do Win16 a Win32, substituir cada ocorrência de __export com __declspec(dllexport). |
Como referência, procure pelo arquivo de cabeçalho WinBase Win32.Contém exemplos de __declspec(dllimport) uso.