Compartilhar via


Exportando de uma DLL usando arquivos DEF

Um arquivo de definição de módulo (. def) é um arquivo de texto contendo uma ou mais instruções 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 instrução no arquivo deve ser a instrução de biblioteca.Essa declaração identifica o arquivo. def como pertencente a uma DLL.A instrução de biblioteca é seguida do nome da DLL.O vinculador coloca esse nome na biblioteca de importação da DLL.

  • Instrução EXPORTS lista os nomes e, opcionalmente, os valores ordinais das funções exportadas pela DLL.Você atribui um valor ordinal da função seguindo o nome da função com um sinal de arroba (@) e um número.Quando você especifica valores ordinais, eles devem estar no intervalo 1 a N, onde n é o número de funções exportadas pela DLL.Se você quiser exportar funções por ordinal, consulte Funções de exportação de uma DLL pelo Ordinal em vez de por nome de , bem como este tópico.

Por exemplo, uma DLL que contém o código para implementar uma árvore binária de pesquisa 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 de esqueleto para você e a adiciona automaticamente a seu projeto.Adicione os nomes das funções a serem exportadas para o arquivo.Para não - MFC DLLs, você deve criar o arquivo. def si mesmo e adicioná-lo ao seu projeto.

Se você estiver exportando funções em um arquivo C++, você tem que colocar nomes decorados no arquivo. def ou definir suas funções exportadas com padrão vinculação c usando extern "C".Se você precisar colocar nomes decorados no arquivo. def, pode obtê-los usando o DUMPBIN ferramenta ou usando o vinculador /MAP opção.Observe que os nomes decorados produzidos pelo compilador compilador específico.Se você colocar os nomes decorados produzidos pelo compilador do Visual C++ em um arquivo. def, a aplicativos que vinculam a sua DLL também devem ser construídos usando a mesma versão do Visual C++, para que os nomes decorados do aplicativo de chamada correspondem aos nomes exportados no arquivo. def da DLL.

Se você estiver criando um extensão DLL, e exportar usando um arquivo. def, coloque o seguinte código no início e no final de seus arquivos de cabeçalho que contêm classes exportadas:

#undef AFX_DATA
#define AFX_DATA AFX_EXT_DATA
// <body of your header file>
#undef AFX_DATA
#define AFX_DATA

Essas linhas Verifique se as variáveis que são usados internamente ou que são adicionados às classes do MFC são exportados (ou importado) de sua extensão DLL.Por exemplo, quando derivando uma classe usando DECLARE_DYNAMIC, a macro se expande para adicionar um CRuntimeClass variável de membro para sua classe.Deixando estas quatro linhas pode causar 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 exportação (.exp) e importar um arquivo de biblioteca (. lib).O vinculador usa o arquivo de exportação para construir o arquivo DLL.Arquivos executáveis implicitamente vinculam ao link DLL para a biblioteca de importação quando eles são criados.

Observe que MFC próprio usa arquivos. def para exportar funções e classes do MFCx0.dll.

O que você deseja fazer?

O que você deseja saber mais sobre?

Consulte também

Conceitos

Exportando de uma DLL