C++ 动态加载 DLL 时,GetProcAddress() 返回 NULL,GetLastError() 获取错误代码为 127

摘要:
对于自己的dll文件,LoadLibrary()成功获取了dll模块句柄,但GetProcAddress()返回了NULL。调用GetLastError()获取127的错误代码,但找不到指定的程序。“使用Dependencies工具(下载地址;//www.dependencywalker.com/)查看dll中导出的函数名:exported function definition,inty)预期的导出函数名是Add,但实际的是_Add@8如下图所示)。

1、问题现象:

  采用“运行期间动态链接”自己的 dll 文件,LoadLibrary() 成功获取 dll 模块句柄,但是 GetProcAddress() 返回 NULL。

2、问题分析:

  调用 GetLastError() 获取错误代码为 127,意思是“找不到指定程序”;

  用 Depends 工具(下载地址:http://www.dependencywalker.com/)查看 dll 中的导出函数名称,

  发现与定义的不完全一致,导出函数定义: extern "C" __declspec(dllexport) int __stdcall Add(int x, int y)

  预期导出函数名为 Add,实际为 _Add@8 如下图所示)。  

  C++ 动态加载 DLL 时,GetProcAddress() 返回 NULL,GetLastError() 获取错误代码为 127第1张

  

3、解决方案:

  (1) 在 DLL 工程中使用 .def 文件显式指定导出文件名,如下如所示:

  C++ 动态加载 DLL 时,GetProcAddress() 返回 NULL,GetLastError() 获取错误代码为 127第2张

  (2) 重新编译 DLL 工程,问题解决。用 Depends 工具查看新的 DLL 导出函数信息如下图所示:

  C++ 动态加载 DLL 时,GetProcAddress() 返回 NULL,GetLastError() 获取错误代码为 127第3张

  

免责声明:文章转载自《C++ 动态加载 DLL 时,GetProcAddress() 返回 NULL,GetLastError() 获取错误代码为 127》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇ubuntu下安装BeyondCompare比较工具私有云盘Seafile下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

IOS 判断设备屏幕尺寸、分辨率

根据屏幕尺寸和分辨率,ios现在数起来有6个版本。 iOS 设备现有的分辨率如下:iPhone/iPod Touch普通屏                           320像素 x 480像素       iPhone 1、3G、3GS,iPod Touch 1、2、33:2 Retina 屏             640像素 x 960像素...

IDEA 中 30 秒生成 Spring Cloud Alibaba 工程

作者 | 图恩  阿里云技术专家 如果你想使用 Spring Cloud Alibaba,那么你遇到的第一个问题一定是如何快速的创建一个脚手架工程。 近日,阿里巴巴发布了 Spring 的国内脚手架定制版 Aliyun Java Initializer,因为全中文界面和流畅速度,被广大开发者热传。Spring 脚手架为开发者提供了丰富的可选组件,并且可以...

Windows 10 彻底关闭 Antimalware Service Executable 降低内存占用

概述 最近给内网的一台电脑安装 Windows 10 专业版系统,由于此电脑不会涉及到不安全因素,所以杀毒软件非必须。 以最大限度节省系统资源考虑,默认安装的 Micoroft Defender 占用了大量内存,而且还有不断增长的趋势。 参考了网上五花八门的方法:修改注册表、编辑组策略等等,但是没有一种方式能真正的关掉 Antimalware Servi...

React常见的15个问题

在 jsComplete,我们管理一个专门用于帮助编程学习者 slack 帐户。我们常常会收到一些有趣的问题,但大多数问题都是常见问题。 我创建这个资源为了帮助 React.js学习者遇到这些常见的问题时提供一定帮助。在这里可以快速找到一些常见问题的解决方案,而不是一,遍又一遍去找解决方法,我会持续更新这些常见的问题。 1. 组件的名称开头要大写 Reac...

Altium Designer(AD软件)如何导出gerber文件

gerber文件输出包括2部分:一、Gerber Files;二、Nc Drill Files;分3次导出; 文件导出是在.PCB项目文件选中情况下进行。 1.PCB的尺寸外形标注一般在mechanical 1、2层; 2.设定原点(若还没设定的话,设定时选择基板左下角) Edit-Origin-Set; 3.输出其一:gerber文件(File-Fab...

js之Function原型

在ECMAScript中,Function(函数)类型实际上是对象。每个函数都是Function类型的实例,而且都与其他引用类型一样具有属性和方法。由于函数是对象,因此函数名实际上也是一个指向函数对象的指针。 1、三种函数声明的方式  1》第一种:普通方式声明函数 1 function box (num1,num2){ 2 return nu...