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

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

Barbara Streisand
Barbara Streisand原創
2024-12-08 11:29:10764瀏覽

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

從DLL 動態載入函數

從C 語言的DLL(動態連結程式庫)動態載入函數可讓您存取單獨定義的功能執行時的模組。以下是解決此問題的方法:

1.載入DLL:

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

這一步驟將DLL載入到記憶體中並傳回一個句柄它。

2。取得函數指標:

要存取DLL 中的函數,需要使用GetProcAddress 取得其位址:

<br>typedef int (__stdcall *f_funci )(<pre class="brush:php;toolbar:false"><br>typedef int (__stdcall *f_funci )(<pre class="brush:php;toolbar:false"><br>typedef int (__stdcall *f_funci )(<pre class="brush:php;toolbar:false">typedefalles; / 定義函數指標型別<p>f_funci funci = (f_funci)GetProcAddress(hDLL, "funci");</p>

此範例假設您的函式名稱為「funci」並使用__stdcall 呼叫約定。

3.呼叫函數:


一旦有了函數指針,就可以像調用任何其他函數一樣調用該函數:

 <p>int result = funci(); <strong></strong></p>

4.從DLL 匯出函數:


在DLL 中,必須使用__declspec(dllexport) 匯出函數,使其可供其他模組存取:

<br>int __declspec(dllexport) __stdcall funci() { // 函數定義<p>}<strong></strong></p>
    其他提示:
  • 建議在DLL句柄被釋放時使用FreeLibrary() 釋放它不再需要。
  • 使用準確匹配的函數指標類型DLL 中函數的簽章。
確保正確的錯誤處理,以處理 DLL 載入或函數解析的任何問題。

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

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