QueryOptionalDelayLoadedAPI 函式 (libloaderapi2.h)
判斷系統上是否提供延遲載入 DLL 中指定的函式。
語法
BOOL QueryOptionalDelayLoadedAPI(
[in] HMODULE hParentModule,
[in] LPCSTR lpDllName,
[in] LPCSTR lpProcName,
DWORD Reserved
);
參數
[in] hParentModule
呼叫模組的句柄。 傳統型應用程式可以使用 GetModuleHandle 或 GetModuleHandleEx 函式來取得此句柄。 Windows 市集應用程式應該將此參數設定為 static_cast<HMODULE>(&__ImageBase)
。
[in] lpDllName
匯出指定函式之延遲載入 DLL 的檔案名。 此參數不區分大小寫。
Windows 市集應用程式應該指定 API 集合,而不是整合型 DLL。 例如,api-ms-win-core-memory-l1-1-1.dll,而不是 kernel32.dll。
[in] lpProcName
要查詢的函式名稱。 此參數區分大小寫。
Reserved
此參數是保留的,而且必須是 0 (0) 。
傳回值
如果系統上有指定的函式可用,則為TRUE。 如果系統上無法使用指定的函式,此函式會傳回 FALSE。 若要取得擴充的錯誤資訊,請呼叫 GetLastError。
備註
延遲載入的 DLL 會以靜態方式連結,但實際上不會載入記憶體,直到執行中的應用程式參考該 DLL 所導出的符號為止。 應用程式通常會延遲載入包含應用程式函式的 DLL,可能只很少呼叫或完全不呼叫,因為 DLL 只有在需要時才會載入,而不是在應用程式啟動時載入,就像其他靜態連結 DLL 一樣。 這有助於改善應用程式效能,特別是在初始化期間。 延遲載入 DLL 會在連結時間使用 /DELAYLOAD (延遲載入 匯入) 連結器選項來指定。
以多個 Windows 版本或多個 Windows 裝置系列為目標的應用程式,也會依賴延遲載入的 DLL,以便在有可用時顯示額外的功能。
傳統型應用程式可以使用延遲載入作為運行時間動態連結的替代方案,該連結使用 LoadLibrary 或 LoadLibraryEx 載入 DLL 和 GetProcAddress 以取得函式的指標。 Windows 市集應用程式無法使用 LoadLibrary 或 LoadLibraryEx,因此若要取得運行時間動態連結的優點,Windows 市集應用程式必須使用延遲載入機制。
若要檢查系統上是否有延遲載入 DLL 中的函式可用,應用程式會使用指定的函式呼叫 QueryOptionalDelayLoadedAPI 。 如果 QueryOptionalDelayLoadedAPI 成功,應用程式就可以安全地呼叫指定的函式。
範例
下列範例示範如何使用 QueryOptionalDelayLoadedAPI 來判斷系統上是否提供 MkParseDisplayName 函式。
#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;
}
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows 10 [傳統型應用程式 |UWP 應用程式] |
最低支援的伺服器 | Windows Server 2016 [傳統型應用程式 |UWP 應用程式] |
目標平台 | Windows |
標頭 | libloaderapi2.h |
程式庫 | WindowsApp.lib |
Dll | Api-ms-win-core-libraryloader-l1-1-1.dll |