Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Mengakses Fungsi DLL Menggunakan LoadLibrary dan GetProcAddress?

Bagaimana untuk Mengakses Fungsi DLL Menggunakan LoadLibrary dan GetProcAddress?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-11 12:36:13555semak imbas

How to Access DLL Functions Using LoadLibrary and GetProcAddress?

Fungsi Pemuatan Secara Dinamik daripada DLL

Soalan:

Bagaimanakah pemegang LoadLibrary boleh digunakan untuk mengakses fungsi yang ditakrifkan dalam a DLL?

LoadLibrary memuatkan DLL ke dalam memori tetapi tidak mengimport fungsinya secara automatik. Ini memerlukan fungsi WinAPI kedua: GetProcAddress.

Contoh:

#include <windows.h>
#include <iostream>

typedef int (__stdcall *f_funci)();

int main()
{
  HINSTANCE hGetProcIDDLL = LoadLibrary("C:\Documents and Settings\User\Desktop\test.dll");

  if (!hGetProcIDDLL) {
    std::cout << "could not load the dynamic library" << std::endl;
    return EXIT_FAILURE;
  }

  // Resolve function address using GetProcAddress
  f_funci funci = (f_funci) GetProcAddress(hGetProcIDDLL, "funci");
  if (!funci) {
    std::cout << "could not locate the function" << std::endl;
    return EXIT_FAILURE;
  }

  std::cout << "funci() returned " << funci() << std::endl;
  
  // Free the library handle when no longer needed
  FreeLibrary(hGetProcIDDLL);
  
  return EXIT_SUCCESS;
}

Eksport Dll:

Pastikan fungsi dieksport dengan betul daripada DLL menggunakan __declspec(dllexport) dan __stdcall atribut:

int __declspec(dllexport) __stdcall funci() {
   // ...
}

Atas ialah kandungan terperinci Bagaimana untuk Mengakses Fungsi DLL Menggunakan LoadLibrary dan GetProcAddress?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn