Explizites Entladen einer verzögert geladenen DLL

Aktualisiert: November 2007

Mit der Linkeroption /delay:unload können Sie eine verzögert geladene DLL entladen. Standardmäßig verbleiben die verzögert geladenen Importe in der Importadressentabelle (IAT), wenn die DLL (mit /delay:unload und __FUnloadDelayLoadedDLL2) durch den Code entladen wird. Wenn jedoch /delay:unload in der Linkerbefehlszeile verwendet wird, wird das explizite Entladen der DLL von der Hilfsfunktion unterstützt. Hierbei wird die IAT in ihren ursprünglichen Zustand zurückgesetzt, und die nun ungültigen Zeiger werden überschrieben. Bei der IAT handelt es sich um ein Feld in ImgDelayDescr, das die Adresse einer Kopie der ursprünglichen IAT enthält (falls vorhanden).

Beispiel

Code

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

Kommentar

Wichtige Hinweise zum Entladen einer verzögert geladenen DLL:

  • Die Implementierung der __FUnloadDelayLoadedDLL2-Funktion finden Sie in der Datei \VC7\INCLUDE\DELAYHLP.CPP.

  • Der Namensparameter der __FUnloadDelayLoadedDLL2-Funktion muss (einschließlich der Groß-/Kleinschreibung) exakt mit dem Inhalt der Importbibliothek, also der Zeichenfolge in der Importtabelle des Abbilds, übereinstimmen. Die Inhalte von Importbibliotheken können mit DUMPBIN /DEPENDENTS angezeigt werden. Wenn eine Zeichenfolgenübereinstimmung ohne Beachtung von Groß-/Kleinschreibung erwünscht ist, können Sie __FUnloadDelayLoadedDLL2 aktualisieren, um eine der CRT-Zeichenfolgenfunktionen oder einen Windows-API-Aufruf zu verwenden.

Weitere Informationen finden Sie unter Entladen einer verzögert geladenen DLL.

Siehe auch

Konzepte

Linkerunterstützung für verzögertes Laden von DLLs