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?

Barbara Streisand
Barbara Streisandasal
2024-12-08 11:29:10764semak imbas

How to Dynamically Load and Call Functions from DLLs in C  ?

Pemuatan Dinamik Fungsi daripada DLL

Memuatkan fungsi secara dinamik daripada DLL (Perpustakaan Pautan Dinamik) dalam C membolehkan anda mengakses fungsi yang ditakrifkan secara berasingan modul semasa runtime. Begini cara untuk mendekati masalah ini:

1. Muatkan DLL:

<br>HINSTANCE hDLL = LoadLibrary("path/to/dll.dll");<br>

Langkah ini memuatkan DLL ke dalam memori dan mengembalikan pemegang ke ia.

2. Dapatkan Penunjuk Fungsi:

Untuk mengakses fungsi dalam DLL, anda perlu mendapatkan alamatnya menggunakan GetProcAddress:

<br>typedef int (__stdcall *f_funci )(); // Tentukan jenis penunjuk fungsi<br>f_funci funci = (f_funci)GetProcAddress(hDLL, "funci");<br>

Contoh ini menganggap fungsi anda dinamakan "funci" dan menggunakan konvensyen panggilan __stdcall.

3. Memanggil Fungsi:

Sebaik sahaja anda mempunyai penunjuk fungsi, anda boleh memanggil fungsi seperti mana-mana fungsi lain:

<br>int result = funci(); <br>

4. Mengeksport Fungsi daripada DLL:

Dalam DLL, fungsi anda mesti dieksport menggunakan __declspec(dllexport) untuk menjadikannya boleh diakses oleh modul lain:


int __declspec(dllexport) __stdcall funci() {
// Definisi fungsi
}

Petua Tambahan:

  • Adalah dinasihatkan untuk membebaskan pemegang DLL menggunakan FreeLibrary() apabila ia tidak diperlukan lagi.
  • Gunakan jenis penuding fungsi yang sepadan dengan tepat tandatangan fungsi dalam DLL.
  • Pastikan pengendalian ralat yang betul untuk mengendalikan sebarang isu dengan pemuatan DLL atau penyelesaian 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!

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