Compartir a través de


Descargar explícitamente un archivo DLL de carga retrasada

Actualización: noviembre 2007

La opción de vinculador /delay:unload permite descargar un archivo DLL de carga retrasada. De forma predeterminada, cuando el código descarga la DLL (mediante /delay:unload y __FUnloadDelayLoadedDLL2), las importaciones de carga retrasada permanecen en la tabla de direcciones de importación (IAT). Sin embargo, si se utiliza el modificador /delay:unload en la línea de comandos del vinculador, la función auxiliar admitirá la descarga explícita del archivo DLL, restableciendo el formato original en la tabla IAT; se sobrescribirán los punteros que no son válidos actualmente. La tabla IAT es un campo de ImgDelayDescr que contiene la dirección de una copia de la tabla IAT original (si existe).

Código de

ejemplo

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

Comentarios

Notas importantes sobre la descarga de una DLL de carga retrasada:

  • La implementación de la función __FUnloadDelayLoadedDLL2 se puede encontrar en el archivo \VC7\INCLUDE\DELAYHLP.CPP.

  • El parámetro de nombre de la función __FUnloadDelayLoadedDLL2 debe coincidir exactamente (incluidas mayúsculas y minúsculas) con el contenido de la biblioteca de importación (esa cadena se encuentra también en la tabla de importación de la imagen). Puede ver el contenido de la biblioteca de importación mediante DUMPBIN /DEPENDENTS. Si se desea una coincidencia de cadenas sin distinguir entre mayúsculas y minúsculas, puede actualizar __FUnloadDelayLoadedDLL2 para que utilice una de las funciones de cadena CRT o una llamada a la API de Windows.

Vea Descargar un archivo DLL de carga retrasada para obtener más información.

Vea también

Conceptos

Compatibilidad del vinculador con las DLL de carga retrasada