Compartilhar via


Alterações na DLL atrasada carregando a função auxiliar desde o Visual C++ 6.0

Se você tiver várias versões do Visual C++ em seu computador ou se você definiu sua própria função de auxiliar, você pode ser afetado por alterações feitas para a DLL carregamento atrasado função auxiliar.Por exemplo:

  • __delayLoadHelper agora é __delayLoadHelper2

  • __pfnDliNotifyHook agora é __pfnDliNotifyHook2

  • __pfnDliFailureHook agora é __pfnDliFailureHook2

  • __FUnloadDelayLoadedDLL agora é __FUnloadDelayLoadedDLL2

ObservaçãoObservação

Se você estiver usando a função auxiliar do padrão, essas alterações não afetarão você.Não há nenhuma alteração em relação a como você invoca o vinculador.

Várias versões do Visual C++

Se você tiver várias versões do Visual C++ em seu computador, verifique se que o vinculador corresponde delayimp.lib.Se houver uma incompatibilidade, você obterá um erro de vinculador relatar uma ___delayLoadHelper2@8 ou ___delayLoadHelper@8 como um símbolo externo não resolvido.O primeiro implica um vinculador novo com um delayimp.lib antigo e o último implica um vinculador antigo com um novo delayimp.lib.

Se você receber um erro de vinculador não resolvido, execute dumpbin /linkermember: 1 no que você espera para conter a função auxiliar para ver qual função auxiliar é definida em vez disso delayimp.lib.A função auxiliar também poderia ser definida em um arquivo de objeto. Execute dumpbin /symbols e procure por delayLoadHelper(2).

Se você souber que o vinculador do Visual C++ 6.0, você tiver, então:

  • Executar dumpbin o arquivo. lib ou. obj do auxiliar de carregamento de atraso para determinar se ele define __delayLoadHelper2.Caso contrário, o link falhará.

  • Definir __delayLoadHelper o atraso de carregar o arquivo do auxiliar. lib ou. obj.

Função definida pelo usuário do auxiliar

Se você definido a sua própria função de auxiliar e estiver usando a versão atual do Visual C++, faça o seguinte:

  • Renomear a função auxiliar __delayLoadHelper2.

  • Como os ponteiros no descritor de atraso (ImgDelayDescr em delayimp.h) foram alterados de endereços absolutos (VAs) para endereços relativos (RVAs) para funcionar como esperado em ambos os programas de 32 e 64 bits, você precisa converter esses back em ponteiros.Foi introduzida uma nova função: PFromRva, encontrado em delayhlp.cpp.Você pode usar esta função em cada um dos campos no descritor de convertê-los de volta para um dos ponteiros de 32 ou 64 bits.A função de auxiliar de carga do atraso padrão continua sendo um bom modelo para usar como exemplo.

Carregar todas as importações para uma DLL atrasada-carregada

O vinculador pode carregar todas as importações de uma DLL que você especificou para ser carregado de atraso.Consulte Carregar todas as importações para uma DLL Delay-Loaded para obter mais informações.

Consulte também

Referência

Noções básicas sobre a função auxiliar