Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Memuatkan dan Menggunakan Fungsi Secara Dinamik daripada DLL dalam C?

Bagaimanakah Saya Boleh Memuatkan dan Menggunakan Fungsi Secara Dinamik daripada DLL dalam C?

Susan Sarandon
Susan Sarandonasal
2024-12-20 14:28:10379semak imbas

How Can I Dynamically Load and Use Functions from a DLL in C  ?

Muat Secara Dinamik Fungsi daripada DLL

Pengenalan

Pautan dinamik membolehkan anda memuatkan fungsi daripada DLL semasa masa jalan, memanjangkan fungsi program anda. Artikel ini akan membimbing anda tentang cara untuk mencapainya.

Memuatkan DLL

Langkah pertama ialah memuatkan DLL ke dalam memori proses semasa. Ini dilakukan menggunakan fungsi LoadLibrary:

HINSTANCE hGetProcIDDLL = LoadLibrary("path/to/test.dll");

Mendapatkan Alamat Fungsi

Setelah DLL dimuatkan, anda perlu mencari alamat fungsi yang ingin anda panggil. Untuk ini, kami menggunakan fungsi GetProcAddress:

typedef int (__stdcall *f_funci)();
f_funci funci = (f_funci)GetProcAddress(hGetProcIDDLL, "funci");

Perhatikan bahawa anda perlu menentukan jenis penuding fungsi yang sepadan dengan tandatangan fungsi yang dieksport. Dalam kes kami, ia adalah fungsi yang mengembalikan integer dan tidak mengambil hujah.

Mengeksport Fungsi daripada DLL

Untuk DLL berjaya dimuatkan, anda perlu mengeksport fungsi dengan betul. Tambahkan yang berikut pada kod sumber DLL anda:

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

Menggunakan Fungsi

Setelah alamat fungsi diperoleh, anda boleh memanggilnya seperti fungsi lain:

std::cout << "funci() returned " << funci() << std::endl;

Melepaskan Pemegang DLL

Untuk pembersihan sumber, adalah amalan yang baik untuk melepaskan pemegang DLL apabila tidak diperlukan lagi:

FreeLibrary(hGetProcIDDLL);

Dengan mengikuti langkah-langkah ini, anda boleh memuatkan dan menggunakan fungsi daripada DLL secara dinamik, meningkatkan fleksibiliti dan kebolehlanjutan program anda dengan ketara.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memuatkan dan Menggunakan 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