首页 >后端开发 >C++ >如何使用 LoadLibrary 和 GetProcAddress 访问 DLL 函数?

如何使用 LoadLibrary 和 GetProcAddress 访问 DLL 函数?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-11 12:36:13557浏览

How to Access DLL Functions Using LoadLibrary and GetProcAddress?

从 DLL 动态加载函数

问题:

如何使用 LoadLibrary 句柄访问 a 中定义的函数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) 和 __stdcall 从 DLL 正确导出属性:

int __declspec(dllexport) __stdcall funci() {
   // ...
}

以上是如何使用 LoadLibrary 和 GetProcAddress 访问 DLL 函数?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn