QueryOptionalDelayLoadedAPI-Funktion (libloaderapi2.h)

Bestimmt, ob die angegebene Funktion in einer verzögert geladenen DLL auf dem System verfügbar ist.

Syntax

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

Parameter

[in] hParentModule

Ein Handle für das aufrufende Modul. Desktopanwendungen können die Funktion GetModuleHandle oder GetModuleHandleEx verwenden, um dieses Handle abzurufen. Windows Store-Apps sollten diesen Parameter auf static_cast<HMODULE>(&__ImageBase)festlegen.

[in] lpDllName

Der Dateiname der verzögert geladenen DLL, die die angegebene Funktion exportiert. Dieser Parameter beachtet die Groß- und Kleinschreibung.

Windows Store-Apps sollten API-Sätze anstelle monolithischer DLLs angeben. Beispielsweise api-ms-win-core-memory-l1-1-1.dll statt kernel32.dll.

[in] lpProcName

Der Name der abzufragenden Funktion. Bei diesem Parameter wird die Groß-/Kleinschreibung beachtet.

Reserved

Dieser Parameter ist reserviert und muss null (0) sein.

Rückgabewert

TRUE, wenn die angegebene Funktion im System verfügbar ist. Wenn die angegebene Funktion im System nicht verfügbar ist, gibt diese Funktion FALSE zurück. Um erweiterte Fehlerinformationen zu erhalten, rufen Sie GetLastError auf.

Hinweise

Eine verzögert geladene DLL wird statisch verknüpft, aber nicht tatsächlich in den Arbeitsspeicher geladen, bis die ausgeführte Anwendung auf ein von dieser DLL exportiertes Symbol verweist. Anwendungen verzögern häufig Lade-DLLs, die Funktionen enthalten, die die Anwendung möglicherweise nur selten oder gar nicht aufruft, da die DLL nur geladen wird, wenn sie benötigt wird, anstatt wie andere statisch verknüpfte DLLs beim Anwendungsstart geladen zu werden. Dies trägt zur Verbesserung der Anwendungsleistung bei, insbesondere während der Initialisierung. Eine DLL zum Verzögern des Ladens wird zur Linkzeit mit der Linkeroption /DELAYLOAD (Delay Load Import) angegeben.

Anwendungen, die auf mehrere Versionen von Windows oder mehrere Windows-Gerätefamilien abzielen, sind auch auf verzögert geladene DLLs angewiesen, um zusätzliche Features sichtbar zu machen, wenn sie verfügbar sind.

Eine Desktopanwendung kann verzögertes Laden als Alternative zur dynamischen Verknüpfung der Laufzeit verwenden, die LoadLibrary oder LoadLibraryEx zum Laden einer DLL und GetProcAddress verwendet, um einen Zeiger auf eine Funktion abzurufen. Eine Windows Store-App kann LoadLibrary oder LoadLibraryEx nicht verwenden. Um die Vorteile der dynamischen Laufzeitverknüpfung zu erhalten, muss eine Windows Store-App den Mechanismus für verzögertes Laden verwenden.

Um zu überprüfen, ob eine Funktion in einer verzögert geladenen DLL auf dem System verfügbar ist, ruft die Anwendung QueryOptionalDelayLoadedAPI mit der angegebenen Funktion auf. Wenn QueryOptionalDelayLoadedAPI erfolgreich ist, kann die Anwendung die angegebene Funktion sicher aufrufen.

Beispiele

Das folgende Beispiel zeigt, wie Sie QueryOptionalDelayLoadedAPI verwenden, um zu bestimmen, ob die MkParseDisplayName-Funktion auf dem System verfügbar ist.

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

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 10 [Desktop-Apps | UWP-Apps]
Unterstützte Mindestversion (Server) Windows Server 2016 [Desktop-Apps | UWP-Apps]
Zielplattform Windows
Kopfzeile libloaderapi2.h
Bibliothek WindowsApp.lib
DLL Api-ms-win-core-libraryloader-l1-1-1.dll

Weitere Informationen

LoadPackagedLibrary

Dynamische Laufzeitverknüpfung