Bagikan melalui


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

LoadPackagedLibrary

Penautan Dinamis Run-Time