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

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

Mary-Kate Olsen
發布: 2024-12-14 05:41:09
原創
493 人瀏覽過

How Do I Import and Use Functions from DLLs in C  ?

從 DLL 匯入函數:綜合指南

載入動態連結函式庫 (DLL) 允許您的 C 程式利用外部共用程式庫的功能。然而,要存取 DLL 中的函數,需要採用與從頭檔案匯入函數不同的方法。

使用 LoadLibrary 載入 DLL

LoadLibrary 函數將 DLL 載入到目前進程的記憶體。此過程不會自動匯入 DLL 中定義的函數。

使用 GetProcAddress 檢索函數位址

一旦 DLL 加載,您需要取得您想要使用的功能。這是使用 GetProcAddress 函數完成的。

#include <windows.h>

typedef int (__stdcall *f_funci)();  // Define function pointer type

int main() {
  HINSTANCE hGetProcIDDLL = LoadLibrary("...")

  // Retrieve function address
  f_funci funci = (f_funci)GetProcAddress(hGetProcIDDLL, "funci");
}
登入後複製

在上面的程式碼片段中,我們定義了一個名為 f_funci 的函數指標類型,它表示我們要導入的函數。 GetProcAddress 函數傳回 DLL 中函數的位址。

從 DLL 匯出函數

要確保從 DLL 正確匯出函數,請使用 __declspec( dllexport) 和 __stdcall 屬性。

int __declspec(dllexport) __stdcall funci() {
   // ...
}
登入後複製

__declspec(dllexport) 屬性指示函數應從 DLL 匯出,__stdcall 屬性指定 DLL 使用的呼叫約定。

釋放 DLL 句柄

使用從 DLL 匯入的函數後,最好釋放函式庫的句柄。這是使用 FreeLibrary 函數完成的。

FreeLibrary(hGetProcIDDLL);
登入後複製

執行下列步驟,您可以動態載入 DLL 並在 C 中存取它們的函數。該技術使您能夠利用可重複使用模組來擴充程式的功能,而無需靜態連結或重新編譯。

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

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