首頁 > 後端開發 > C++ > 如何使用 LoadLibrary 和 GetProcAddress 存取 DLL 函數?

如何使用 LoadLibrary 和 GetProcAddress 存取 DLL 函數?

Mary-Kate Olsen
發布: 2024-12-11 12:36:13
原創
583 人瀏覽過

How to Access DLL Functions Using LoadLibrary and GetProcAddress?

從DLL 動態載入函數

問題:

如何使用LoadLibrary 存取句柄定義的函數DLL?

LoadLibrary 將 DLL 載入到記憶體中,但不會自動匯入其函數。這需要第二個WinAPI函數:GetProcAddress。

範例:

#include <windows.h>
#include <iostream>

typedef int (__stdcall *f_funci)();

int main()
{
  HINSTANCE hGetProcIDDLL = LoadLibrary("C:\Documents and Settings\User\Desktop\test.dll");

  if (!hGetProcIDDLL) {
    std::cout << "could not load the dynamic library" << std::endl;
    return EXIT_FAILURE;
  }

  // Resolve function address using GetProcAddress
  f_funci funci = (f_funci) GetProcAddress(hGetProcIDDLL, "funci");
  if (!funci) {
    std::cout << "could not locate the function" << std::endl;
    return EXIT_FAILURE;
  }

  std::cout << "funci() returned " << funci() << std::endl;
  
  // Free the library handle when no longer needed
  FreeLibrary(hGetProcIDDLL);
  
  return EXIT_SUCCESS;
}
登入後複製

Dll匯出:

確保功能使用__declspec(dllexport) 和__dcall DLL 正確匯出屬性:

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

以上是如何使用 LoadLibrary 和 GetProcAddress 存取 DLL 函數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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