Descarregamento explicitamente uma DLL carregados de atraso
The /Delay: opção de vinculador descarregamento permite descarregar uma DLL que foi carregado de atraso.Por padrão, quando seu código descarrega a DLL (usando /delay:descarregar e __FUnloadDelayLoadedDLL2), as importações carregado atraso permanecerão na tabela de endereço de importação (IAT).No entanto, se você usar /atraso:descarregar na linha de comando do vinculador, a função auxiliar suportará o descarregar explícitos de DLL, redefinindo o IAT para sua forma original; os ponteiros inválido agora serão substituídos.O IAT é um campo no ImgDelayDescr que contém o endereço de uma cópia do IAT original (se existir).
Exemplo
Código
// link with /link /DELAYLOAD:MyDLL.dll /DELAY:UNLOAD
#include <windows.h>
#include <delayimp.h>
#include "MyDll.h"
#include <stdio.h>
#pragma comment(lib, "delayimp")
#pragma comment(lib, "MyDll")
int main()
{
BOOL TestReturn;
// MyDLL.DLL will load at this point
fnMyDll();
//MyDLL.dll will unload at this point
TestReturn = __FUnloadDelayLoadedDLL2("MyDll.dll");
if (TestReturn)
printf_s("\nDLL was unloaded");
else
printf_s("\nDLL was not unloaded");
}
Comentários
Observações importantes sobre descarregar uma DLL carregada atraso:
Você pode encontrar a implementação do __FUnloadDelayLoadedDLL2 função no arquivo \VC7\INCLUDE\DELAYHLP.CPP.
O parâmetro nome do __FUnloadDelayLoadedDLL2 função deve corresponder exatamente (incluindo caso) o que a biblioteca de importação contém (ou seqüência de caracteres também seja na tabela importar a imagem).Você pode exibir o Sumário da biblioteca de importação com DUMPBIN /dependentes.Se uma correspondência de cadeia de caracteres sem diferenciação de maiúsculas e minúsculas for desejada, você poderá atualizar __FUnloadDelayLoadedDLL2 para usar uma das funções de seqüência CRT ou uma telefonar à API do Windows.
See Descarregar uma DLL carregados de atraso para obter mais informações.