Condividi tramite


Funzione QueryOptionalDelayLoadedAPI (libloaderapi2.h)

Determina se la funzione specificata in una DLL caricata in ritardo è disponibile nel sistema.

Sintassi

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

Parametri

[in] hParentModule

Handle per il modulo chiamante. Le applicazioni desktop possono usare la funzione GetModuleHandle o GetModuleHandleEx per ottenere questo handle. Le app di Windows Store devono impostare questo parametro su static_cast<HMODULE>(&__ImageBase).

[in] lpDllName

Nome del file della DLL con caricamento ritardato che esporta la funzione specificata. Questo parametro non fa distinzione tra maiuscole e minuscole.

Le app di Windows Store devono specificare set di API anziché DLL monolitiche. Ad esempio, api-ms-win-core-memory-l1-1-1.dll, anziché kernel32.dll.

[in] lpProcName

Nome della funzione da eseguire una query. In questo parametro viene fatta distinzione tra maiuscole e minuscole.

Reserved

Questo parametro è riservato e deve essere zero (0).

Valore restituito

TRUE se la funzione specificata è disponibile nel sistema. Se la funzione specificata non è disponibile nel sistema, questa funzione restituisce FALSE. Per informazioni dettagliate sull'errore, chiamare GetLastError.

Commenti

Una DLL caricata in ritardo è collegata staticamente ma non effettivamente caricata in memoria finché l'applicazione in esecuzione fa riferimento a un simbolo esportato da tale DLL. Le applicazioni spesso ritardano il caricamento delle DLL che contengono funzioni l'applicazione potrebbero chiamare solo raramente o meno, perché la DLL viene caricata solo quando è necessaria anziché essere caricata all'avvio dell'applicazione come altre DLL collegate staticamente. Ciò consente di migliorare le prestazioni dell'applicazione, soprattutto durante l'inizializzazione. Una DLL di caricamento ritardato viene specificata in fase di collegamento con l'opzione linker /DELAYLOAD (Ritardo importazione caricamento).

Le applicazioni destinate a più versioni di Windows o più famiglie di dispositivi Windows si basano anche sulle DLL caricate in ritardo per rendere visibili funzionalità aggiuntive quando sono disponibili.

Un'applicazione desktop può usare il caricamento ritardato come alternativa al collegamento dinamico di runtime che usa LoadLibrary o LoadLibraryEx per caricare una DLL e GetProcAddress per ottenere un puntatore a una funzione. Un'app di Windows Store non può usare LoadLibrary o LoadLibraryEx, quindi per ottenere i vantaggi del collegamento dinamico di runtime, un'app di Windows Store deve usare il meccanismo di caricamento ritardato.

Per verificare se una funzione in una DLL caricata in ritardo è disponibile nel sistema, l'applicazione chiama QueryOptionalDelayLoadedAPI con la funzione specificata. Se QueryOptionalDelayLoadedAPI ha esito positivo, l'applicazione può chiamare in modo sicuro la funzione specificata.

Esempio

Nell'esempio seguente viene illustrato come usare QueryOptionalDelayLoadedAPI per determinare se la funzione MkParseDisplayName è disponibile nel 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;
}

Requisiti

Requisito Valore
Client minimo supportato Windows 10 [app desktop | App UWP]
Server minimo supportato Windows Server 2016 [app desktop | App UWP]
Piattaforma di destinazione Windows
Intestazione libloaderapi2.h
Libreria WindowsApp.lib
DLL Api-ms-win-core-libraryloader-l1-1-1.dll

Vedi anche

LoadPackagedLibrary

Collegamento dinamico in fase di esecuzione