Compartilhar via


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

Você pode exportar funções em qualquer um dos dois modos do arquivo - um .def ou da palavra-chave de __declspec(dllexport) .Para ajudá-lo a decidir qual é melhor maneira para sua DLL, considere as seguintes questões:

  • Você planeja exportar posteriormente mais funções?

  • O DLL é usado apenas pelos aplicativos que você pode recriar, ou ele é usado por aplicativos que você não pode reconstrução- para o exemplo, os aplicativos que são criados por terceiros?

Profissionais e - - contra de usar .def arquivo

Exportar funções em um arquivo de .def do controle sobre os ordinais de exportação.Quando você adiciona uma função exportada a sua DLL, você pode atribuir um valor ordinal maior do que qualquer outra função exportadas.Quando você fizer isso, os aplicativos que usam vincular implícito não precisam relink com a biblioteca de importação que contém a nova função.Isso é muito conveniente se você estiver criando uma DLL para uso em vários aplicativos porque você pode adicionar novas funcionalidades e também garantir que continuar a trabalhar corretamente com aplicativos que dependem já nele.Por exemplo, as dlls MFC são criados usando arquivos de .def.

Outra vantagem de usar um arquivo de .def é que você pode usar o atributo de NONAME para exportar uma função.Isso coloca somente ordinal na tabela exporta no DLL.Para as dlls que têm um grande número de funções exportadas, usando o atributo de 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 informações sobre ordinal de exportação, consulte Exportando funções de uma DLL pelo Ordinal em vez de por nome.

Uma desvantagem de usar um arquivo de .def é que se você estiver exportando funções no arquivo c++, você precisa colocar os nomes decorados no arquivo de .def ou definir as funções exportadas usando “C” extern para evitar a decoração de nome que é feita pelo compilador Visual C++.

Se você colocar os nomes decorados no .def arquivo, você pode obtê-lo usando a ferramenta de DUMPBIN ou usando a opção de /MAP de vinculador.Os nomes decorados que são gerados pelo compilador compilador são específicos; como consequência, se você colocar os nomes decorados que são geradas pelo compilador em um arquivo de .def, os aplicativos que vinculam para a DLL também devem ser criados usando a mesma versão do compilador para que os nomes decorados no aplicativo de chamada coincidam com os nomes exportados no arquivo de .def de DLL.

Profissionais e - - contra de usar o __declspec (dllexport)

Usar __declspec(dllexport) é conveniente porque você não tem que se preocupar sobre a manutenção de um arquivo de .def e obtenção dos nomes das funções decorados exportadas.No entanto, a utilidade dessa maneira para exportar é limitada pelo número de aplicativos associados você estiver disposto a recompilação.Se você reconstrói o DLL com novos exportações, você também precisará recriar os aplicativos como os nomes decorados para funções exportadas C++ podem alterar se você usar uma versão diferente do compilador para recriar o.

900axts6.collapse_all(pt-br,VS.110).gifO que você deseja fazer?

900axts6.collapse_all(pt-br,VS.110).gifQue você deseja saber mais?

Consulte também

Conceitos

Exportando de uma DLL