Partager via


QueryOptionalDelayLoadedAPI, fonction (libloaderapi2.h)

Détermine si la fonction spécifiée dans une DLL à chargement différé est disponible sur le système.

Syntaxe

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

Paramètres

[in] hParentModule

Handle du module appelant. Les applications de bureau peuvent utiliser la fonction GetModuleHandle ou GetModuleHandleEx pour obtenir ce handle. Les applications du Windows Store doivent définir ce paramètre sur static_cast<HMODULE>(&__ImageBase).

[in] lpDllName

Nom de fichier de la DLL à chargement différé qui exporte la fonction spécifiée. Ce paramètre ne respecte pas la casse.

Les applications du Windows Store doivent spécifier des ensembles d’API, plutôt que des DLL monolithiques. Par exemple, api-ms-win-core-memory-l1-1-1.dll, plutôt que kernel32.dll.

[in] lpProcName

Nom de la fonction à interroger. Ce paramètre respecte la casse.

Reserved

Ce paramètre est réservé et doit être égal à zéro (0).

Valeur retournée

TRUE si la fonction spécifiée est disponible sur le système. Si la fonction spécifiée n’est pas disponible sur le système, cette fonction retourne FALSE. Pour obtenir des informations détaillées sur l’erreur, appelez GetLastError.

Remarques

Une DLL à chargement différé est liée de manière statique, mais elle n’est pas réellement chargée en mémoire tant que l’application en cours d’exécution ne fait pas référence à un symbole exporté par cette DLL. Les applications retardent souvent les DLL de chargement qui contiennent des fonctions que l’application n’appelle que rarement ou pas du tout, car la DLL est chargée uniquement quand elle est nécessaire au lieu d’être chargée au démarrage de l’application comme d’autres DLL liées statiquement. Cela permet d’améliorer les performances de l’application, en particulier lors de l’initialisation. Une DLL delay-load est spécifiée au moment de la liaison avec l’option de l’éditeur de liens /DELAYLOAD (Delay Load Import).

Les applications qui ciblent plusieurs versions de Windows ou plusieurs familles d’appareils Windows s’appuient également sur des DLL à chargement différé pour rendre visibles des fonctionnalités supplémentaires lorsqu’elles sont disponibles.

Une application de bureau peut utiliser le chargement différé comme alternative à la liaison dynamique d’exécution qui utilise LoadLibrary ou LoadLibraryEx pour charger une DLL et GetProcAddress pour obtenir un pointeur vers une fonction. Une application du Windows Store ne peut pas utiliser LoadLibrary ou LoadLibraryEx. Par conséquent, pour bénéficier des avantages de la liaison dynamique à l’exécution, une application du Windows Store doit utiliser le mécanisme de chargement différé.

Pour case activée si une fonction dans une DLL à chargement différé est disponible sur le système, l’application appelle QueryOptionalDelayLoadedAPI avec la fonction spécifiée. Si QueryOptionalDelayLoadedAPI réussit, l’application peut appeler en toute sécurité la fonction spécifiée.

Exemples

L’exemple suivant montre comment utiliser QueryOptionalDelayLoadedAPI pour déterminer si la fonction MkParseDisplayName est disponible sur le système.

#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;
}

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows 10 [applications de bureau | Applications UWP]
Serveur minimal pris en charge Windows Server 2016 [applications de bureau | Applications UWP]
Plateforme cible Windows
En-tête libloaderapi2.h
Bibliothèque WindowsApp.lib
DLL Api-ms-win-core-libraryloader-l1-1-1.dll

Voir aussi

LoadPackagedLibrary

Liaison dynamique au moment de l’exécution