Partilhar via


Alterações na DLL atrasada carregar 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. For example:

  • __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 chamar 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 a delayimp.lib (a). Se houver uma incompatibilidade, você obterá um erro de vinculador seja emissão de relatórios ___delayLoadHelper2@8 ou ___delayLoadHelper@8 como um símbolo externo não resolvidos. O primeiro implica um vinculador de 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 sobre o delayimp.lib que você espera para conter a função auxiliar para ver qual função auxiliar é definida em vez disso. A função auxiliar também poderia ser definida em um arquivo de objeto; Execute dumpbin /symbols e procure por delayLoadHelper(2).

Se você sabe que tem o vinculador do Visual C++ 6.0, então:

  • Execute o 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. lib ou. obj do auxiliar.

Função definida pelo usuário do auxiliar

Se definido 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 para ponteiros. Foi introduzida uma nova função: PFromRva, encontrado em delayhlp.cpp. Você pode usar essa 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 carregamento de 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