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çã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.