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 스토어 앱은 모놀리식 DLL이 아닌 API 집합을 지정해야 합니다. 예를 들어 kernel32.dll 대신 api-ms-win-core-memory-l1-1-1.dll.
[in] lpProcName
쿼리할 함수의 이름입니다. 이 매개 변수는 대/소문자를 구분합니다.
Reserved
이 매개 변수는 예약되어 있으며 0이어야 합니다.
반환 값
시스템에서 지정된 함수를 사용할 수 있으면 TRUE입니다. 시스템에서 지정된 함수를 사용할 수 없는 경우 이 함수는 FALSE를 반환합니다. 확장 오류 정보를 가져오려면 GetLastError를 호출합니다.
설명
지연 로드된 DLL은 정적으로 연결되지만 실행 중인 애플리케이션이 해당 DLL에서 내보낸 기호를 참조할 때까지 실제로 메모리에 로드되지 않습니다. 애플리케이션은 다른 정적으로 연결된 DLL과 같이 애플리케이션 시작 시 로드되는 대신 필요한 경우에만 DLL이 로드되므로 애플리케이션이 거의 또는 전혀 호출하지 않을 수 있는 함수를 포함하는 로드 DLL을 지연시키는 경우가 많습니다. 이렇게 하면 특히 초기화 중에 애플리케이션 성능이 향상됩니다. /DELAYLOAD(지연 로드 가져오기) 링커 옵션을 사용하여 연결 시간에 지연 로드 DLL을 지정합니다.
여러 버전의 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 |