You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GetProcAddress无法找到DLL文件内U2U_Test函数的问题咨询

DLL调用时GetProcAddress返回NULL的解决方案

你遇到的问题核心原因通常是导出函数名不匹配、DLL加载异常两类,具体排查解决步骤如下:

常见原因排查

  • 导出函数名被修饰导致不匹配
    如果目标DLL是C开发且导出时未加extern "C"声明,编译器会对函数名进行C名字修饰,最终导出的函数名不会是纯U2U_Test,可能是?U2U_Test@@YAXXZ这类带修饰规则的字符串;如果函数使用__stdcall调用约定,导出名还可能变成_U2U_Test@0这类格式。
    你用Dependency Walker查看时不能只看函数签名,要专门看导出列表的名称列,确认实际导出的函数名字符串。
  • DLL未成功加载
    你当前只对LoadLibrary返回值做了非空判断,没有打印错误码确认失败原因:
    1. 路径问题:my_dll.dll是否放在程序运行目录、系统目录或已加入环境变量的路径下
    2. 位数不匹配:你的主程序位数(32位/64位)和DLL位数必须严格一致,跨位数无法加载
    3. 依赖缺失:目标DLL本身依赖的其他DLL不存在,也会导致加载失败

修复方案

  1. 若DLL是你自行开发,在导出函数声明时添加extern "C"避免名字修饰,示例如下:
#ifdef __cplusplus
extern "C" {
#endif
// 确保导出函数名和你调用时传入的名称一致
__declspec(dllexport) void U2U_Test(void);
#ifdef __cplusplus
}
#endif
  1. 若DLL是第三方不可修改,直接将Dependency Walker查到的真实导出函数名作为参数传入GetProcAddress即可;也可以通过函数序号调用,兼容性差不推荐。
  2. 补充错误排查代码,加载失败时调用GetLastError()获取错误码,快速定位问题。

额外语法提示:你的check函数返回值声明为void,末尾return addr();属于语法错误,直接调用addr();即可不需要加return。

内容的提问来源于stack exchange,提问作者Sasan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 16:48:03