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çã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çã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?
Funções de exportação C++ para uso em executáveis em linguagem c
Funções de exportação c para uso em executáveis c ou C++ idioma