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

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

Patricia Arquette
Patricia Arquette原創
2024-12-12 22:58:14739瀏覽

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中文網其他相關文章!

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