Udostępnij za pośrednictwem


Jawne zwalnianie bibliotek DLL załadowanych z opóźnieniem

Przełącznik/DELAY: opcja linker unload umożliwia zwalnianie biblioteki DLL, która załadowane z opóźnieniem.Domyślnie, gdy kod zwalnia bibliotekę DLL (za pomocą /delay:unload i __FUnloadDelayLoadedDLL2), przywóz załadowany opóźnienie pozostaną w tabeli Adres importu (IAT).Jednakże użycie /delay:unload w wierszu polecenia linker, funkcja helper będzie wspierać jawne rozładunku DLL, resetowanie IAT do oryginalnej postaci; wskaźniki obecnie nieprawidłowym zostaną zastąpione.IAT to pole w ImgDelayDescr zawiera adres kopię oryginalnego IAT, (jeśli istnieje).

Przykład

Kod

// 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");
}

Komentarze

Ważne uwagi dotyczące rozładunku DLL załadowane opóźnienia:

  • Można znaleźć wykonania __FUnloadDelayLoadedDLL2 funkcji w pliku \VC7\INCLUDE\DELAYHLP.CPP.

  • Parametr name of __FUnloadDelayLoadedDLL2 funkcja musi dokładnie odpowiadać (w tym przypadku) co importu w bibliotece (to ciąg jest również Tabela importu na obrazie).Można wyświetlić zawartość biblioteki importu z DUMPBIN DEPENDENTS.W razie potrzeby liter ciąg dopasowania można zaktualizować __FUnloadDelayLoadedDLL2 Aby skorzystać z jednej z funkcji ciągów CRT lub wywołania interfejsu API systemu Windows.

Zobacz rozładunku Delay-Loaded DLL uzyskać więcej informacji.

Zobacz też

Koncepcje

Obsługa konsolidatora dla bibliotek DLL załadowanych z opóźnieniem