首頁 > 後端開發 > C++ > 如何在 C 中動態載入和呼叫 DLL 中的函數?

如何在 C 中動態載入和呼叫 DLL 中的函數?

Patricia Arquette
發布: 2024-12-12 22:58:14
原創
660 人瀏覽過

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

從DLL 動態載入函數

問題:

您已經建立了一個名為funci( 的函數) 的DLL( )並嘗試從C 載入和存取此函數。但是,您會遇到錯誤“'funci' 未在此範圍內聲明”。如何使用 DLL 的指標來存取該函數?

答案:

第1 步:載入DLL

HINSTANCE hGetProcIDDLL = LoadLibrary("C:\path\to\test.dll");
登入後複製

這會將DLL 載入到進程的

第 2步驟:解析函數位址

您需要使用 GetProcAddress 取得函數的位址。

typedef int (__stdcall *f_funci)(); // Define function pointer
f_funci funci = (f_funci)GetProcAddress(hGetProcIDDLL, "funci");
登入後複製

第 3 步: 驗證函數位址

檢查函數位址是否為成功取得。

if (!funci) {
  std::cout << "Could not locate the function" << std::endl;
  return EXIT_FAILURE;
}
登入後複製

第四步:呼叫函數

有了函數指針,就可以呼叫它了。

std::cout << "funci() returned " << funci() << std::endl;
登入後複製

第 5 步:釋放 DLL (可選)

使用 FreeLibrary() 釋放 DLL 句柄,以從記憶體中卸載 DLL。

FreeLibrary(hGetProcIDDLL);
登入後複製

其他提示:

  • WinAPI 函數 GetProcAddress 要求函數名稱為字串,因此請確保指定正確的名稱。
  • 導出函數的呼叫約定(例如 __stdcall)必須與程式中定義函數指標時所使用的呼叫約定相符。
  • 正確從 DLL 匯出函數是必不可少的。使用 __declspec(dllexport) 屬性導出函數。

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板