Determinar qual método de exportação para uso

Para determinar qual método usar para exportar funções (um arquivo. def ou o __declspec(dllexport) palavra-chave), responda as seguintes perguntas:

  • Será possível continuar adicionar funções exportadas adicionais?

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

Vantagens e desvantagens de usar.Arquivos de definição

Exportando funções em um dá de arquivo. def você controlar ao longo do que a exportação ordinais. Quando você adiciona funções exportadas adicionais para sua DLL, você pode atribuir os valores mais altos Ordinais (maiores do que qualquer função exportada). Quando você fizer isso, aplicativos usando vinculação implícita é necessário vincular novamente com a nova biblioteca de importação 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 aperfeiçoar sua DLL adicionando funcionalidade adicional ao mesmo tempo, ao mesmo tempo, garantindo que os aplicativos existentes continuem a funcionar corretamente com a nova DLL. As DLLs do MFC são criadas usando os arquivos. def.

Outra vantagem de usar um arquivo. def é que você pode exportar funções usando o atributo NONAME, que coloca apenas o ordinal da tabela de exportações na DLL. Para DLLs com um grande número de funções exportadas, usando o atributo NONAME pode reduzir o tamanho do arquivo DLL. Para obter informações sobre como escrever uma instrução 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 Funções de exportação de uma DLL pelo Ordinal em vez de por nome de.

A principal desvantagem de usar o arquivo de definição de .a é que se você estiver exportando funções em um arquivo do C++, você tem que colocar os nomes decorados no arquivo. def ou definir suas 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 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.

Prós e contras do uso de __declspec(dllexport)

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

O que você deseja fazer?

O que você deseja saber mais a respeito?

Consulte também

Conceitos

Exportação de uma DLL