Partilhar via


Determinar qual método usar exportação

Para determinar o método a ser usado para exportar funções (um arquivo .def ou o **__declspec(dllexport)**palavra-chave ), responda às seguintes perguntas:

  • Você irá ser continua a adicionar funções exportadas adicionais?

  • Quem está usando sua DLL?Por exemplo, é uma DLL de terceiros usada por muitos executáveis que não é possível recompilar ou é a DLL usada somente por aplicativos que você pode recompilar com com facilidade?

Prós e contras do uso de arquivos .def

Exportando funções em um permite o arquivo .def controle sobre o que a exportar são números ordinais.Quando você adiciona funções exportadas adicionais a sua DLL, você pode atribuí-los valores ordinais maiores (mais do que qualquer Outros função exportada).Quando você fizer isso, aplicativos que usam vinculação implícita não são necessário vincular novamente com a biblioteca de importação novo que contém as novas funções.Isso é muito importante, por exemplo, se você estiver criando uma DLL de terceiros para uso por vários aplicativos.Você pode continuar a aprimorar sua DLL adicionando funcionalidade adicional ao mesmo time ao mesmo time, assegurando que os aplicativos existentes continuem a funcionar adequadamente com a nova DLL.As DLLs do MFC são criadas usando .def arquivos.

Outra vantagem de usar um arquivo .def é que você pode exportar funções usando o atributo NONAME, que coloca apenas o ordinal da tabela exportações DLL.Para as DLLs com um grande número de funções exportadas, usando o atributo NONAME pode reduzir o dimensionar do arquivo DLL.Para obter informações sobre como escrever uma demonstrativo de definição de módulo, consulte Regras para instruções de definição de módulo.Para obter mais informações sobre exportação ordinal, consulte Exportar funções de uma DLL por ordinal em vez de por nome.

A principal desvantagem do uso .a def arquivo é que se você estiver exportando funções em um arquivo C++, você tem que coloque nomes decorados no arquivo .def ou definir as funções exportadas com ligação C padrão usando extern "C" para evitar a decoração de nome feita pelo compilador.

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.

Prós e contras do uso __declspec(dllexport)

Usando __declspec(dllexport) é conveniente porque não é necessário se preocupar sobre a manutenção de um arquivo .def e obter os nomes decorados das funções exportadas.Esse método é adequado se, por exemplo, você está criando uma DLL para uso com um aplicativo que você controle.Se você recompilar a DLL com exportações novas, você precisa recriar o aplicativo como os nomes decorados para funções C++ exportados podem ser alterado se recompile com uma versão diferente do compilador.

O que você deseja fazer?

O que você deseja saber mais sobre?

Consulte também

Conceitos

Exportar de uma DLL