Fungsi GetProcAddress (libloaderapi.h)

Mengambil alamat fungsi yang diekspor (juga dikenal sebagai prosedur) atau variabel dari pustaka tautan dinamis (DLL) yang ditentukan.

Sintaks

FARPROC GetProcAddress(
  [in] HMODULE hModule,
  [in] LPCSTR  lpProcName
);

Parameter

[in] hModule

Handel ke modul DLL yang berisi fungsi atau variabel. Fungsi LoadLibrary, LoadLibraryEx, LoadPackagedLibrary, atau GetModuleHandle mengembalikan handel ini.

Fungsi GetProcAddress tidak mengambil alamat dari modul yang dimuat menggunakan bendera LOAD_LIBRARY_AS_DATAFILE . Untuk informasi selengkapnya, lihat LoadLibraryEx.

[in] lpProcName

Nama fungsi atau variabel, atau nilai ordinal fungsi. Jika parameter ini adalah nilai ordinal, parameter harus dalam kata urutan rendah; kata urutan tinggi harus nol.

Menampilkan nilai

Jika fungsi berhasil, nilai yang dikembalikan adalah alamat fungsi atau variabel yang diekspor.

Jika fungsi gagal, nilai yang dikembalikan adalah NULL. Untuk mendapatkan informasi kesalahan yang diperluas, hubungi GetLastError.

Keterangan

Ejaan dan kasus nama fungsi yang ditunjukkan oleh lpProcName harus identik dengan itu dalam pernyataan EXPORTS dari file module-definition (.def) DLL sumber. Nama fungsi yang diekspor mungkin berbeda dari nama yang Anda gunakan saat memanggil fungsi-fungsi ini dalam kode Anda. Perbedaan ini disembunyikan oleh makro yang digunakan dalam file header SDK. Untuk informasi selengkapnya, lihat Konvensi untuk Prototipe Fungsi.

Parameter lpProcName dapat mengidentifikasi fungsi DLL dengan menentukan nilai ordinal yang terkait dengan fungsi dalam pernyataan EXPORTS . GetProcAddress memverifikasi bahwa ordinal yang ditentukan berada dalam rentang 1 hingga nilai ordinal tertinggi yang diekspor dalam file .def. Fungsi kemudian menggunakan ordinal sebagai indeks untuk membaca alamat fungsi dari tabel fungsi.

Jika file .def tidak menomori fungsi secara berturut-turut dari 1 ke N (di mana N adalah jumlah fungsi yang diekspor), kesalahan dapat terjadi di mana GetProcAddress mengembalikan alamat non-NULL yang tidak valid, meskipun tidak ada fungsi dengan ordinal yang ditentukan.

Jika fungsi mungkin tidak ada di modul DLL—misalnya, jika fungsi hanya tersedia di Windows Vista tetapi aplikasi mungkin berjalan di Windows XP—tentukan fungsi berdasarkan nama daripada dengan nilai ordinal dan rancang aplikasi Anda untuk menangani kasus ketika fungsi tidak tersedia, seperti yang ditunjukkan dalam fragmen kode berikut.

typedef void (WINAPI *PGNSI)(LPSYSTEM_INFO);

// Call GetNativeSystemInfo if supported or GetSystemInfo otherwise.

   PGNSI pGNSI;
   SYSTEM_INFO si;

   ZeroMemory(&si, sizeof(SYSTEM_INFO));
   
   pGNSI = (PGNSI) GetProcAddress(
      GetModuleHandle(TEXT("kernel32.dll")), 
      "GetNativeSystemInfo");
   if(NULL != pGNSI)
   {
      pGNSI(&si);
   }
   else 
   {
       GetSystemInfo(&si);
   }

Untuk contoh lengkap yang berisi fragmen kode ini, lihat Mendapatkan Versi Sistem.

Contoh

Misalnya, lihat Menggunakan Run-Time Dynamic Linking.

Persyaratan

   
Klien minimum yang didukung Windows XP [aplikasi desktop | Aplikasi UWP]
Server minimum yang didukung Windows Server 2003 [aplikasi desktop | Aplikasi UWP]
Target Platform Windows
Header libloaderapi.h (termasuk Windows.h)
Pustaka Kernel32.lib
DLL Kernel32.dll

Lihat juga

Fungsi Pustaka Dynamic-Link

FreeLibrary

GetModuleHandle

LoadLibrary

LoadLibraryEx

LoadPackagedLibrary

Penautan Dinamis Run-Time

API Vertdll tersedia di enklave VBS