Compartilhar via


Explicitamente descarregar uma DLL atrasada-carregada

O /delay: opção de vinculador unload permite descarregar uma DLL que foi carregado de atraso.Por padrão, quando seu código descarrega a DLL (usando /delay:unload e __FUnloadDelayLoadedDLL2), as importações carregado com atraso permanecerão na tabela de endereços de importação (IAT).No entanto, se você usar o /delay:unload na linha de comando do vinculador, a função auxiliar suportará o descarregamento explícito da DLL, redefinindo o IAT ao formato original; os ponteiros inválido agora serão substituídos.O IAT é um campo de ImgDelayDescr que contém o endereço de uma cópia do IAT original (se existir).

Exemplo

96c1b5cf.collapse_all(pt-br,VS.110).gifCó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");
}

96c1b5cf.collapse_all(pt-br,VS.110).gifComentários

Notas importantes em descarregar uma DLL atrasada-carregada:

  • Você pode localizar a implementação da __FUnloadDelayLoadedDLL2 a função no arquivo \VC7\INCLUDE\DELAYHLP.CPP.

  • O parâmetro do nome da __FUnloadDelayLoadedDLL2 função deve corresponder exatamente (inclusive o caso) o que a biblioteca de importação contém (ou seqüência de caracteres também seja na tabela de importação na imagem).Você pode exibir o conteúdo da biblioteca de importação com DUMPBIN DEPENDENTS.Se uma correspondência de maiúsculas e minúsculas de seqüência de caracteres for desejada, você poderá atualizar __FUnloadDelayLoadedDLL2 para usar as funções de seqüência CRT ou uma chamada de API do Windows.

Consulte descarregar uma DLL Delay-Loaded para obter mais informações.

Consulte também

Conceitos

Suporte de vinculador para DLLs carregado com atraso