Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Você pode exportar funções de duas maneiras: um arquivo .def ou a __declspec(dllexport) palavra-chave. Para ajudá-lo a decidir qual caminho é melhor para sua DLL, considere estas perguntas:
Planeia exportar mais funções mais tarde?
Sua DLL é usada apenas por aplicativos que você pode reconstruir ou é usada por aplicativos que você não pode reconstruir — por exemplo, aplicativos que são criados por terceiros?
Prós e contras do uso de arquivos .def
A exportação de funções em um arquivo .def oferece controle sobre os ordinais de exportação. Quando você adiciona uma função exportada à sua DLL, você pode atribuir-lhe um valor ordinal mais alto do que qualquer outra função exportada. Quando você fizer isso, os aplicativos que usam vinculação implícita não precisam revincular com a biblioteca de importação que contém a nova função. Isso é muito conveniente se você estiver projetando uma DLL para uso por muitos aplicativos, porque você pode adicionar novas funcionalidades e também garantir que ele continue a funcionar corretamente com os aplicativos que já dependem dele. Por exemplo, as DLLs MFC são criadas usando arquivos .def.
Outra vantagem de usar um arquivo .def é que você pode usar o NONAME atributo para exportar uma função. Isso coloca somente o ordinal na tabela de exportações na DLL. Para DLLs que têm um grande número de funções exportadas, usando o NONAME atributo 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 Module-Definition. Para obter informações sobre exportação ordinal, consulte Exportando funções de uma DLL por ordinal em vez de por nome.
Uma desvantagem de usar um arquivo .def é que, se você estiver exportando funções em um arquivo C++, terá que colocar os nomes decorados no arquivo .def ou definir as funções exportadas usando "C" externo para evitar a decoração de nomes feita pelo compilador Microsoft C++ (MSVC).
Se você colocar os nomes decorados no arquivo .def, poderá obtê-los usando a ferramenta DUMPBIN ou a opção linker /MAP . Os nomes decorados que são produzidos pelo compilador são específicos do compilador; portanto, se você colocar os nomes decorados que são produzidos pelo compilador em um arquivo .def, os aplicativos que se vinculam à DLL também devem ser criados usando a mesma versão do compilador para que os nomes decorados no aplicativo de chamada correspondam aos nomes exportados no arquivo .def da DLL.
Prós e contras do uso de __declspec(dllexport)
Usar __declspec(dllexport) é conveniente porque você não precisa se preocupar em manter um arquivo .def e obter os nomes decorados das funções exportadas. No entanto, a utilidade dessa maneira de exportar é limitada pelo número de aplicativos vinculados que você está disposto a reconstruir. Ao reconstruir a DLL com novas exportações, também terá de reconstruir as aplicações, pois os nomes decorados para funções exportadas em C++ podem alterar-se se utilizar uma versão diferente do compilador para a reconstruir.