Share via


Déchargement explicite d'une DLL à chargement différé

Mise à jour : novembre 2007

L'option de l'éditeur de liens /delay:unload vous permet de décharger une DLL à chargement différé. Par défaut, lorsque votre code décharge la DLL (avec /delay:unload et __FUnloadDelayLoadedDLL2), les importations à chargement différé restent dans la table des adresses d'importation (IAT, Import Address Table). Cependant, si vous utilisez /delay:unload sur la ligne de commande de l'éditeur de liens, la fonction d'assistance prend en charge le déchargement explicite de la DLL, rétablissant la table des adresses d'importation à sa forme d'origine ; les pointeurs désormais non valides sont remplacés. L'IAT est un champ dans ImgDelayDescr qui contient l'adresse d'une copie de l'IAT d'origine (si elle existe).

Exemple

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

Commentaires

Remarques importantes sur le déchargement d'une DLL à chargement différé :

  • Vous pouvez trouver l'implémentation de la fonction __FUnloadDelayLoadedDLL2 dans le fichier \VC7\INCLUDE\DELAYHLP.CPP.

  • Le paramètre de nom de la fonction __FUnloadDelayLoadedDLL2 doit exactement correspondre (avec respect de la casse) au contenu de la bibliothèque d'importation (cette chaîne se trouve également dans la table d'importation de l'image). Vous pouvez afficher le contenu de la bibliothèque d'importation avec DUMPBIN /DEPENDENTS. Si vous souhaitez une correspondance de chaînes ne respectant pas la casse, vous pouvez mettre à jour __FUnloadDelayLoadedDLL2 pour utiliser l'une des fonctions de chaîne CRT ou un appel API Windows.

Pour plus d'informations, consultez Déchargement d'une DLL à chargement différé.

Voir aussi

Concepts

Prise en charge de l'éditeur de liens pour les DLL à chargement différé