Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Memuatkan dan Memanggil Fungsi secara Dinamik daripada DLL dalam C?

Bagaimana untuk Memuatkan dan Memanggil Fungsi secara Dinamik daripada DLL dalam C?

Patricia Arquette
Lepaskan: 2024-12-12 22:58:14
asal
660 orang telah melayarinya

How to Dynamically Load and Call a Function from a DLL in C  ?

Memuatkan Fungsi secara Dinamik daripada DLL

Soalan:

Anda telah mencipta DLL dengan fungsi bernama funci( ) dan sedang cuba memuatkan dan mengakses fungsi ini daripada C . Walau bagaimanapun, anda menghadapi ralat "'funci' tidak diisytiharkan dalam skop ini." Bagaimanakah anda boleh menggunakan penuding DLL untuk mengakses fungsi?

Jawapan:

Langkah 1: Muatkan DLL

HINSTANCE hGetProcIDDLL = LoadLibrary("C:\path\to\test.dll");
Salin selepas log masuk

Ini memuatkan DLL ke dalam proses memori.

Langkah 2: Selesaikan Alamat Fungsi

Anda perlu mendapatkan alamat fungsi menggunakan GetProcAddress.

typedef int (__stdcall *f_funci)(); // Define function pointer
f_funci funci = (f_funci)GetProcAddress(hGetProcIDDLL, "funci");
Salin selepas log masuk

Langkah 3 : Sahkan Alamat Fungsi

Semak sama ada alamat fungsi diperoleh berjaya.

if (!funci) {
  std::cout << "Could not locate the function" << std::endl;
  return EXIT_FAILURE;
}
Salin selepas log masuk

Langkah 4: Panggil Fungsi

Setelah anda mempunyai penunjuk fungsi, anda boleh memanggilnya.

std::cout << "funci() returned " << funci() << std::endl;
Salin selepas log masuk

Langkah 5: Membebaskan DLL (Pilihan)

Lepaskan Pemegang DLL menggunakan FreeLibrary() untuk memunggah DLL daripada memori.

FreeLibrary(hGetProcIDDLL);
Salin selepas log masuk

Petua Tambahan:

  • Fungsi WinAPI GetProcAddress memerlukan nama fungsi sebagai rentetan, jadi pastikan anda menyatakan nama yang betul.
  • Konvensyen panggilan bagi fungsi yang dieksport (cth., __stdcall) mesti sepadan dengan yang digunakan semasa mentakrifkan penunjuk fungsi dalam program anda.
  • Mengeksport fungsi dengan betul daripada DLL adalah penting. Gunakan atribut __declspec(dllexport) untuk mengeksport fungsi.

Atas ialah kandungan terperinci Bagaimana untuk Memuatkan dan Memanggil Fungsi secara Dinamik daripada DLL dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan