Importando e exportando
Você pode importar símbolos públicos para um aplicativo ou exportar funções de uma DLL usando dois métodos:
Usar um arquivo de definição de módulo (.def) ao criar a DLL
Usar as palavras-chave
__declspec(dllimport)
ou__declspec(dllexport)
em uma definição de função no aplicativo principal
Usando um arquivo .def
Um arquivo de definição de módulo (.def) é um arquivo de texto que contém uma ou mais instruções de módulo que descrevem vários atributos de uma DLL. Se você não usar __declspec(dllimport)
ou __declspec(dllexport)
para exportar as funções de uma DLL, a DLL exigirá um arquivo .def.
Você pode usar arquivos .def para importar para um aplicativo ou exportar de uma DLL.
Usando __declspec
Você não precisa usar __declspec(dllimport)
para que seu código compile corretamente, mas isso permite que o compilador gere um código melhor. O compilador consegue gerar um código melhor porque pode determinar se uma função existe em uma DLL ou não, o que permite que o compilador produza um código que ignora um nível de indireção que normalmente estaria presente em uma chamada de função que cruzou o limite de uma DLL. No entanto, você deve usar __declspec(dllimport)
para importar variáveis usadas em uma DLL.
Com a seção EXPORTS adequada do arquivo .def, __declspec(dllexport)
não é necessário. __declspec(dllexport)
foi adicionado para fornecer uma forma fácil de exportar funções de um arquivo .exe ou .dll sem usar um arquivo .def.
O formato Executável Portátil do Win32 foi projetado para minimizar o número de páginas que devem ser mexidas para corrigir as importações. Para fazer isso, ele coloca todos os endereços de importação para qualquer programa em um único lugar chamado Tabela de Endereços de Importação. Isso permite que o carregador modifique apenas uma ou duas páginas ao acessar essas importações.