Compartilhar via


Exportação de uma DLL usando arquivos de definição

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 as funções da DLL, a DLL requer um arquivo. def.

Um arquivo. def a 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 pelo 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. Atribuir a função de um valor ordinal, seguindo o nome da função com um sinal de arroba (@) e um número. Quando você especificar valores ordinais, eles devem estar no intervalo de 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 da MFC para criar uma DLL da MFC, o assistente cria um arquivo. def de esqueleto para você e adiciona automaticamente ao seu projeto. Adicione os nomes das funções a serem exportadas para este arquivo. Para não - MFC DLLs, você deve criar o arquivo. def para si mesmo e adicioná-lo ao seu projeto.

Se você estiver exportando funções em um arquivo do C++, você precisará colocar os nomes decorados no arquivo. def ou definir suas funções exportadas com ligação c padrão usando extern "C". Se você precisar colocar os nomes decorados no arquivo. def, você pode obtê-los usando o DUMPBIN ferramenta ou usando 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 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 coincidam com os nomes de exportado no arquivo. def da DLL.

Se você estiver criando um a 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 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 garantem que as variáveis que são usados internamente ou que são adicionados às classes do MFC são 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 membro para sua turma. 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 um arquivo de biblioteca (. lib) de importação. O vinculador usa o arquivo de exportação para criar o arquivo DLL. Arquivos executáveis que vinculam implicitamente o link de DLL para a biblioteca de importação quando eles são criados.

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

O que você deseja fazer?

O que você deseja saber mais a respeito?

Consulte também

Conceitos

Exportação de uma DLL