Compartilhar via


Função QueryOptionalDelayLoadedAPI (libloaderapi2.h)

Determina se a função especificada em uma DLL carregada com atraso está disponível no sistema.

Sintaxe

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

Parâmetros

[in] hParentModule

Um identificador para o módulo de chamada. Os aplicativos da área de trabalho podem usar a função GetModuleHandle ou GetModuleHandleEx para obter esse identificador. Os aplicativos da Windows Store devem definir esse parâmetro como static_cast<HMODULE>(&__ImageBase).

[in] lpDllName

O nome do arquivo da DLL carregada com atraso que exporta a função especificada. Este parâmetro não diferencia maiúsculas de minúsculas.

Os aplicativos da Windows Store devem especificar conjuntos de API, em vez de DLLs monolíticas. Por exemplo, api-ms-win-core-memory-l1-1-1.dll, em vez de kernel32.dll.

[in] lpProcName

O nome da função a ser consultada. Este parâmetro diferencia maiúsculas e minúsculas.

Reserved

Esse parâmetro é reservado e deve ser zero (0).

Retornar valor

TRUE se a função especificada estiver disponível no sistema. Se a função especificada não estiver disponível no sistema, essa função retornará FALSE. Para obter informações de erro estendidas, chame GetLastError.

Comentários

Uma DLL carregada com atraso é vinculada estaticamente, mas não é realmente carregada na memória até que o aplicativo em execução faça referência a um símbolo exportado por essa DLL. Os aplicativos geralmente atrasam as DLLs de carga que contêm funções que o aplicativo pode chamar apenas raramente ou não, porque a DLL só é carregada quando é necessária, em vez de ser carregada na inicialização do aplicativo, como outras DLLs vinculadas estaticamente. Isso ajuda a melhorar o desempenho do aplicativo, especialmente durante a inicialização. Uma DLL de carregamento com atraso é especificada no momento do link com a opção do vinculador /DELAYLOAD (Importação de Carga de Atraso ).

Os aplicativos destinados a várias versões do Windows ou de várias famílias de dispositivos Windows também dependem de DLLs carregadas com atraso para tornar visíveis recursos extras quando estiverem disponíveis.

Um aplicativo da área de trabalho pode usar o carregamento atrasado como uma alternativa à vinculação dinâmica de runtime que usa LoadLibrary ou LoadLibraryEx para carregar uma DLL e GetProcAddress para obter um ponteiro para uma função. Um aplicativo da Windows Store não pode usar LoadLibrary ou LoadLibraryEx, portanto, para obter os benefícios da vinculação dinâmica de runtime, um aplicativo da Windows Store deve usar o mecanismo de carregamento atrasado.

Para marcar se uma função em uma DLL carregada com atraso está disponível no sistema, o aplicativo chama QueryOptionalDelayLoadedAPI com a função especificada. Se QueryOptionalDelayLoadedAPI for bem-sucedido, o aplicativo poderá chamar a função especificada com segurança.

Exemplos

O exemplo a seguir mostra como usar QueryOptionalDelayLoadedAPI para determinar se a função MkParseDisplayName está disponível no 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 Valor
Cliente mínimo com suporte Windows 10 [aplicativos da área de trabalho | Aplicativos UWP]
Servidor mínimo com suporte Windows Server 2016 [aplicativos da área de trabalho | Aplicativos UWP]
Plataforma de Destino Windows
Cabeçalho libloaderapi2.h
Biblioteca WindowsApp.lib
DLL Api-ms-win-core-libraryloader-l1-1-1.dll

Confira também

LoadPackagedLibrary

Vinculação dinâmica em tempo de execução