Fungsi QueryOptionalDelayLoadedAPI (libloaderapi2.h)
Menentukan apakah fungsi yang ditentukan dalam DLL yang dimuat keterlambatan tersedia pada sistem.
Sintaks
BOOL QueryOptionalDelayLoadedAPI(
[in] HMODULE hParentModule,
[in] LPCSTR lpDllName,
[in] LPCSTR lpProcName,
DWORD Reserved
);
Parameter
[in] hParentModule
Handel ke modul panggilan. Aplikasi desktop dapat menggunakan fungsi GetModuleHandle atau GetModuleHandleEx untuk mendapatkan handel ini. Aplikasi Bursa Windows harus mengatur parameter ini ke static_cast<HMODULE>(&__ImageBase)
.
[in] lpDllName
Nama file DLL yang dimuat keterlambatan yang mengekspor fungsi yang ditentukan. Parameter ini tidak peka huruf besar/kecil.
Aplikasi Bursa Windows harus menentukan set API, bukan DLL monolitik. Misalnya, api-ms-win-core-memory-l1-1-1.dll, bukan kernel32.dll.
[in] lpProcName
Nama fungsi yang akan dikueri. Parameter ini peka huruf besar/kecil.
Reserved
Parameter ini dicadangkan dan harus nol (0).
Nilai kembali
TRUE jika fungsi yang ditentukan tersedia pada sistem. Jika fungsi yang ditentukan tidak tersedia pada sistem, fungsi ini mengembalikan FALSE. Untuk mendapatkan informasi kesalahan yang diperluas, hubungi GetLastError.
Keterangan
DLL yang dimuat keterlambatan secara statis ditautkan tetapi tidak benar-benar dimuat ke dalam memori sampai aplikasi yang sedang berjalan mereferensikan simbol yang diekspor oleh DLL tersebut. Aplikasi sering menunda muatan DLL yang berisi fungsi yang mungkin hanya jarang atau tidak dipanggil aplikasi, karena DLL hanya dimuat ketika diperlukan alih-alih dimuat pada pengaktifan aplikasi seperti DLL lain yang ditautkan secara statis. Ini membantu meningkatkan performa aplikasi, terutama selama inisialisasi. DLL tunda-muat ditentukan pada waktu tautan dengan opsi penghubung /DELAYLOAD (Tunda Impor Beban).
Aplikasi yang menargetkan beberapa versi Windows atau beberapa keluarga perangkat Windows juga mengandalkan DLL yang dimuat keterlambatan untuk membuat fitur tambahan yang terlihat saat tersedia.
Aplikasi desktop dapat menggunakan pemuatan tertunda sebagai alternatif untuk penautan dinamis runtime yang menggunakan LoadLibrary atau LoadLibraryEx untuk memuat DLL dan GetProcAddress untuk mendapatkan penunjuk ke fungsi. Aplikasi Bursa Windows tidak dapat menggunakan LoadLibrary atau LoadLibraryEx, jadi untuk mendapatkan manfaat dari penautan dinamis runtime, aplikasi Bursa Windows harus menggunakan mekanisme pemuatan yang tertunda.
Untuk memeriksa apakah fungsi dalam DLL yang dimuat keterlambatan tersedia pada sistem, aplikasi memanggil QueryOptionalDelayLoadedAPI dengan fungsi yang ditentukan. Jika QueryOptionalDelayLoadedAPI berhasil, aplikasi dapat memanggil fungsi yang ditentukan dengan aman.
Contoh
Contoh berikut menunjukkan cara menggunakan QueryOptionalDelayLoadedAPI untuk menentukan apakah fungsi MkParseDisplayName tersedia di sistem.
#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;
}
Persyaratan
Persyaratan | Nilai |
---|---|
Klien minimum yang didukung | Windows 10 [aplikasi desktop | Aplikasi UWP] |
Server minimum yang didukung | Windows Server 2016 [aplikasi desktop | Aplikasi UWP] |
Target Platform | Windows |
Header | libloaderapi2.h |
Pustaka | WindowsApp.lib |
DLL | Api-ms-win-core-libraryloader-l1-1-1.dll |
Lihat juga
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk