关于GetProcAddress返回错误代码为127的解决方案
关于GetProcAddress返回错误代码为127的解决方案
运行期间显示地去加载DLL库,当LoadLibrary可以返回当前DLL模块的句柄时,而GetProcAddress取得函数的地址为空时。通过GetLastError去获取错误代码为127,很有可能是动态链接库工程里面函数声明的没有加extern “C”。
解决方案
只针对自己写的dll项目提供解决方案,如果是拿的第三方的动态链接库出这样的问题,不在此解决方案中。
通常写dll工程的时候,头文件都会有类似与这样的
#ifndef PCH_H
#define PCH_H
#else
#endif //PCH_H
当我们想要显示的导出自己的函数在其他工程中使用时,需要使用extern "C"去导出自己的函数。关于为什么要用extern “C”,貌似是C++方面没什么标准,不同的编译器可能产生不同的修饰。加入了extren “C”,不会有额外的修饰,这样就统一了。
在头文件应该这样写
#ifndef PCH_H
#define PCH_H_API extern "C" __declspec(dllexport)
#else
#define PCH_H_API __declspec(dllimport)
#endif //PCH_HPCH_H_API void ExportFunc(LPCTSTR pszContent);//这里就是需要导出的函数,增加了extern "C"的修饰
这里用到了简单的宏,不然的话,全部写出还是有点点多的
extern "C" {__declspec(dllexport) void ExportFunc(LPCTSTR pszContent);
} //这个代码块等同于上面的PCH_H_API void ExportFunc(LPCTSTR pszContent)
然后在另一个项目中测试
int main()
{HMODULE hModule = ::LoadLibrary("..\\DllTest\\Debug\\DllTest.dll");if (hModule != NULL){PFNEXPORTFUNC mExportFunc = (PFNEXPORTFUNC)::GetProcAddress(hModule, "ExportFunc");int n = GetLastError();if (mExportFunc != NULL){mExportFunc("大家好");}::FreeLibrary(hModule);}return 0;
}
这样GetLastError()就不会返回127,可以调用dll中的mExportFunc函数了。以上皆是主要代码,部分其他的代码如Dll中mExportFunc实现的代码没有列出。
关于GetProcAddress返回错误代码为127的解决方案相关推荐
- mciSendCommand 返回错误代码277 的解决方案
昨天,需要用到mfc播放音乐,于是,使用mciSendCommand接口. 可是,开启设备的时候,总是 返回 错误代码277 MCI_OPEN_PARMS op; UINT rs; rs=mciSen ...
- ProGuard的返回错误代码1。异常的解决方法
引用:http://wangwei121004-163-com.iteye.com/blog/1206595 ProGuard的返回错误代码1.See控制台 情况1: Proguard的返回错误代码1 ...
- java执行python返回null_[转]java调用python脚本以及通过Process.waitFor()直接调用python模块返回错误代码1的一种解决办法...
常见的java调用python脚本方式 通过jython提供的类库实现 通过Runtime.getRuntime()开启进程来执行脚本文件 通过jython提供的类库实现 通过jython实现的话,我 ...
- vs2015运行项目时出现“编译器失败,错误代码为 1”的解决方案
vs2015运行项目时出现"编译器失败,错误代码为 1"的解决方案 参考文章: (1)vs2015运行项目时出现"编译器失败,错误代码为 1"的解决方案 (2) ...
- Android错误代码返回,【已解决】JPUSH的回调返回错误代码6012
调试android中的jpush的代码. 发现: set alias的callback中,返回错误代码6012 所以去搜索: jpush 6012 找到:6012在JPush服务stop状态下设置了t ...
- 百度地图api定位的使用详解和返回错误码61的解决方案
返回错误码61的解决方案我记不住了,我是看了官方demo改的,不过可以看下面的配置设置,应该可以解决,如果不能解决,可以评论或联系我 百度地图api定位的使用详解 1.获取密钥 官网 2.下载SDK, ...
- html2canvas中toDataURL方法返回值为:data,解决方案
阅文时长 | 0.35分钟 字数统计 | 572字符 主要内容 | 1.引言&背景 2.解决方案 3.声明与参考资料 『html2canvas中toDataURL方法返回值为:data,解决方 ...
- 远程服务器返回错误 (401) 未经授权 解决方案
远程服务器返回错误 (401) 未经授权 解决方案 参考文章: (1)远程服务器返回错误 (401) 未经授权 解决方案 (2)https://www.cnblogs.com/Jin-1007/arc ...
- adobe安装服务器无响应,Adobe系列软件安装错误代码详解和解决方案
错误代码 说明 解决方案 1.P1 安装/更新核心组件失败 下载最新版本的安装程序并重试. .P2 安装/更新核心组件失败 下载最新版本的安装程序并重试. 21.P21 不符合系统要求. 请将系统升级 ...
最新文章
- 3年完成2款云端AI芯片研发量产,百度造芯为什么这么快?
- 【转】ionic run android 成功launch success,但是genymotion虚拟机没有显示
- Java与.NET 的Web Services相互调用
- 牛客网暑期ACM多校训练营(第三场)A - PAXM Team(01背包)
- LinkedList 的实现原理浅析
- 26-- 转换成小写字母
- LeetCode 374. 猜数字大小(二分查找)
- BugkuCTF-WEB题网站被黑
- 【C语言】构建一个校园交通查询系统程序。能够规划出任意出发地和目的地之间的最短路径。...
- 在ubuntu用wget下载多个文件,axel多线程下载(多线程超级快)
- 【机器学习基础】正规方程法(Normal equation)(正则化和非正则化)——吴恩达课程笔记
- SpringBoot 整合 Editormd(完整版)
- 关于bios+mbr还原uefi+gpt的系统后,出现进不去系统的问题
- 上传图片报Invalid filename错误
- 什么是OsmocomBB
- H5手机休闲游戏开发商有哪些?带你看遍北京游戏研发公司
- 通达信资金净流入公式_通达信主力资金净流入指标
- Android 源码编译技巧--模块清理
- python 批量下载财务数据_Python+Wind 批量下载上市公司年报 - Part 1/2
- 音乐专业又和计算机有关的吗,计算机音乐专业介绍