首頁 >後端開發 >C++ >如何在 C 語言中動態載入和使用 DLL 中的函數?

如何在 C 語言中動態載入和使用 DLL 中的函數?

Susan Sarandon
Susan Sarandon原創
2024-12-20 14:28:10379瀏覽

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

從 DLL 動態載入函數

簡介

動態連結可讓您在執行時從 DLL 載入函數,擴充了您的程式。本文將指導您如何完成此操作。

載入 DLL

第一步是將 DLL 載入到目前進程的記憶體中。這是使用 LoadLibrary 函數完成的:

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

取得函數位址

載入 DLL 後,您需要找到要呼叫的函數的位址。為此,我們使用 GetProcAddress 函數:

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

請注意,您需要定義與匯出函數的簽章相符的函數指標類型。在我們的例子中,它是一個傳回整數且不帶參數的函數。

從 DLL 匯出函數

為了成功載入 DLL,您需要正確匯出函數。將以下內容加入DLL 的原始程式碼:

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

使用函數

取得函數的位址後,您可以像呼叫任何其他函數一樣呼叫它:

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

釋放DLL 句柄

對於資源清理,釋放DLL句柄是一個很好的做法不再需要時的DLL 句柄:

FreeLibrary(hGetProcIDDLL);

按照以下步驟,您可以動態加載和使用DLL 中的函數,顯著增強程序的靈活性和可擴展性。

以上是如何在 C 語言中動態載入和使用 DLL 中的函數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn