Compartir a través de


Función QueryOptionalDelayLoadedAPI (libloaderapi2.h)

Determina si la función especificada en un archivo DLL cargado con retraso está disponible en el sistema.

Sintaxis

BOOL QueryOptionalDelayLoadedAPI(
  [in] HMODULE hParentModule,
  [in] LPCSTR  lpDllName,
  [in] LPCSTR  lpProcName,
       DWORD   Reserved
);

Parámetros

[in] hParentModule

Identificador del módulo que realiza la llamada. Las aplicaciones de escritorio pueden usar la función GetModuleHandle o GetModuleHandleEx para obtener este identificador. Las aplicaciones de la Tienda Windows deben establecer este parámetro en static_cast<HMODULE>(&__ImageBase).

[in] lpDllName

Nombre de archivo del archivo DLL cargado con retraso que exporta la función especificada. Este parámetro no distingue mayúsculas de minúsculas.

Las aplicaciones de la Tienda Windows deben especificar conjuntos de API, en lugar de archivos DLL monolíticos. Por ejemplo, api-ms-win-core-memory-l1-1-1.dll, en lugar de kernel32.dll.

[in] lpProcName

Nombre de la función que se va a consultar. Este parámetro distingue mayúsculas de minúsculas.

Reserved

Este parámetro está reservado y debe ser cero (0).

Valor devuelto

TRUE si la función especificada está disponible en el sistema. Si la función especificada no está disponible en el sistema, esta función devuelve FALSE. Para obtener información de error extendida, llame a GetLastError.

Comentarios

Un archivo DLL cargado con retraso se vincula estáticamente, pero no se carga realmente en la memoria hasta que la aplicación en ejecución hace referencia a un símbolo exportado por ese archivo DLL. Las aplicaciones a menudo retrasan la carga de archivos DLL que contienen funciones a las que la aplicación puede llamar solo rara vez o no, ya que el archivo DLL solo se carga cuando es necesario en lugar de cargarse en el inicio de la aplicación, como otros archivos DLL vinculados estáticamente. Esto ayuda a mejorar el rendimiento de la aplicación, especialmente durante la inicialización. Se especifica un archivo DLL de carga diferida en el momento del vínculo con la opción del enlazador /DELAYLOAD (Importación de carga diferida).

Las aplicaciones que tienen como destino varias versiones de Windows o varias familias de dispositivos Windows también dependen de archivos DLL cargados con retraso para hacer visibles características adicionales cuando están disponibles.

Una aplicación de escritorio puede usar la carga retrasada como alternativa a la vinculación dinámica en tiempo de ejecución que usa LoadLibrary o LoadLibraryEx para cargar un archivo DLL y GetProcAddress para obtener un puntero a una función. Una aplicación de la Tienda Windows no puede usar LoadLibrary o LoadLibraryEx, por lo que para obtener las ventajas de la vinculación dinámica en tiempo de ejecución, una aplicación de la Tienda Windows debe usar el mecanismo de carga retrasado.

Para comprobar si una función de un archivo DLL cargado con retraso está disponible en el sistema, la aplicación llama a QueryOptionalDelayLoadedAPI con la función especificada. Si QueryOptionalDelayLoadedAPI se realiza correctamente, la aplicación puede llamar de forma segura a la función especificada.

Ejemplos

En el ejemplo siguiente se muestra cómo usar QueryOptionalDelayLoadedAPI para determinar si la función MkParseDisplayName está disponible en el sistema.

#include <windows.h>
#include <libloaderapi2.h>

// For this example, you need to pass
// /delayload: ext-ms-win-com-ole32-l1-1-1.dll to link.exe.

EXTERN_C IMAGE_DOS_HEADER __ImageBase;

BOOL
AreMonikersSupported ()
{

    BOOL isApiAvailable;

    // Check if MkParseDisplayName is available on the system. It is only
    // available on desktop computers, and not on mobile devices or Xbox.

    isApiAvailable = 
        QueryOptionalDelayLoadedAPI(static_cast<HMODULE>(&__ImageBase),
                                    "ext-ms-win-com-ole32-l1-1-1.dll",
                                    "MkParseDisplayName",
                                    0);

    return isApiAvailable;
}

Requisitos

Requisito Value
Cliente mínimo compatible Windows 10 [aplicaciones de escritorio | Aplicaciones para UWP]
Servidor mínimo compatible Windows Server 2016 [aplicaciones de escritorio | Aplicaciones para UWP]
Plataforma de destino Windows
Encabezado libloaderapi2.h
Library WindowsApp.lib
Archivo DLL Api-ms-win-core-libraryloader-l1-1-1.dll

Consulte también

LoadPackagedLibrary

Vinculación dinámica en tiempo de ejecución