Exportar de uma DLL usando arquivos DEF
Um arquivo de definição de módulo (.def) é um arquivo de texto que contém uma ou mais declarações do módulo que descrevem vários atributos de uma DLL.Se você não estiver usando o __declspec(dllexport) palavra-chave para exportar funções da DLL, a DLL requer um arquivo .def.
Um arquivo .def mínima deve conter as seguintes instruções de definição de módulo:
A primeira demonstrativo no arquivo deve ser a demonstrativo de biblioteca.Essa demonstrativo identifica o arquivo .def sistema autônomo pertencente a uma DLL.A demonstrativo de biblioteca é seguida pelo nome da DLL.O vinculador coloca esse nome na biblioteca de importação da DLL.
demonstrativo EXPORTS lista os nomes e, opcionalmente, os valores ordinais de funções exportados pela DLL.Atribuir a função um valor ordinal, seguindo o nome da função com uma arroba (@) e um número.Quando você especifica valores ordinais, devem estar no intervalo 1 a N, onde N é o número de funções exportada pela DLL.Se você quiser exportar funções por ordinal, consulte Exportar funções de uma DLL por ordinal em vez de por nome, bem sistema autônomo este tópico.
Por exemplo, uma DLL que contém o código para implementar uma Pesquisar binária árvore pode parecer o seguinte:
LIBRARY BTREE
EXPORTS
Insert @1
Delete @2
Member @3
Min @4
Se você usar o Assistente de DLL do MFC para criar uma DLL do MFC, o assistente cria um arquivo .def esqueleto para você e adiciona automaticamente a seu projeto.Adicione os nomes das funções a serem exportadas para este arquivo.Para não-MFC DLLs, você deve criar o arquivo de .def por conta própria e adicioná-lo ao seu projeto.
Se você estiver exportando funções em um arquivo C++, você precisa colocar nomes decorados no arquivo .def ou definir as funções exportadas com ligação C padrão usando extern "C".Se você precisar colocar nomes decorados no arquivo .def, você pode obtê-los usando o DUMPBIN ferramenta ou utilizando o vinculador / MAP opção.Observe que os nomes decorados produzidos pelo compilador são específico do compilador.Se você colocar os nomes decorados produzidos pelo compilador Visual C++ em um arquivo .def, a aplicativos que se vinculam a sua DLL também devem ser criados usando a mesma versão do Visual C++ para que os nomes decorados o aplicativo de chamada correspondem aos nomes exportados da DLL .def arquivo.
Se você estiver criando um DLL de extensão e exportar usando um arquivo .def, coloque o código a seguir no início e no participante de seus arquivos de cabeçalho que contém as classes exportadas:
#undef AFX_DATA
#define AFX_DATA AFX_EXT_DATA
// <body of your header file>
#undef AFX_DATA
#define AFX_DATA
Essas linhas garantir que a MFC variáveis que são usados internamente ou que são adicionados às classes sejam exportados (ou importado) da sua DLL de extensão.Por exemplo, ao derivar uma classe usando DECLARE_DYNAMIC, a macro se expande para adicionar um CRuntimeClass variável de membro para sua classe. Deixando esses quatro linhas pode fazer com que sua DLL compilar ou vincular incorretamente ou causar um erro quando o aplicativo cliente links para a DLL.
Ao criar a DLL, o vinculador usa o arquivo .def para criar um arquivo de exportar (.exp) e um arquivo de biblioteca (.lib) de importação.O vinculador, em seguida, usa o arquivo de exportar para criar o arquivo DLL.Arquivos executáveis implicitamente vinculam ao link DLL para a biblioteca de importação quando eles são criados.
Observe que o MFC próprio usa arquivos .def exportar funções e classes do MFCx0.dll.