首页 >后端开发 >C++ >如何在 C 中动态加载和调用 DLL 中的函数?

如何在 C 中动态加载和调用 DLL 中的函数?

Patricia Arquette
Patricia Arquette原创
2024-12-12 22:58:14676浏览

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