关于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的解决方案相关推荐

  1. mciSendCommand 返回错误代码277 的解决方案

    昨天,需要用到mfc播放音乐,于是,使用mciSendCommand接口. 可是,开启设备的时候,总是 返回 错误代码277 MCI_OPEN_PARMS op; UINT rs; rs=mciSen ...

  2. ProGuard的返回错误代码1。异常的解决方法

    引用:http://wangwei121004-163-com.iteye.com/blog/1206595 ProGuard的返回错误代码1.See控制台 情况1: Proguard的返回错误代码1 ...

  3. java执行python返回null_[转]java调用python脚本以及通过Process.waitFor()直接调用python模块返回错误代码1的一种解决办法...

    常见的java调用python脚本方式 通过jython提供的类库实现 通过Runtime.getRuntime()开启进程来执行脚本文件 通过jython提供的类库实现 通过jython实现的话,我 ...

  4. vs2015运行项目时出现“编译器失败,错误代码为 1”的解决方案

    vs2015运行项目时出现"编译器失败,错误代码为 1"的解决方案 参考文章: (1)vs2015运行项目时出现"编译器失败,错误代码为 1"的解决方案 (2) ...

  5. Android错误代码返回,【已解决】JPUSH的回调返回错误代码6012

    调试android中的jpush的代码. 发现: set alias的callback中,返回错误代码6012 所以去搜索: jpush 6012 找到:6012在JPush服务stop状态下设置了t ...

  6. 百度地图api定位的使用详解和返回错误码61的解决方案

    返回错误码61的解决方案我记不住了,我是看了官方demo改的,不过可以看下面的配置设置,应该可以解决,如果不能解决,可以评论或联系我 百度地图api定位的使用详解 1.获取密钥 官网 2.下载SDK, ...

  7. html2canvas中toDataURL方法返回值为:data,解决方案

    阅文时长 | 0.35分钟 字数统计 | 572字符 主要内容 | 1.引言&背景 2.解决方案 3.声明与参考资料 『html2canvas中toDataURL方法返回值为:data,解决方 ...

  8. 远程服务器返回错误 (401) 未经授权 解决方案

    远程服务器返回错误 (401) 未经授权 解决方案 参考文章: (1)远程服务器返回错误 (401) 未经授权 解决方案 (2)https://www.cnblogs.com/Jin-1007/arc ...

  9. adobe安装服务器无响应,Adobe系列软件安装错误代码详解和解决方案

    错误代码 说明 解决方案 1.P1 安装/更新核心组件失败 下载最新版本的安装程序并重试. .P2 安装/更新核心组件失败 下载最新版本的安装程序并重试. 21.P21 不符合系统要求. 请将系统升级 ...

最新文章

  1. 3年完成2款云端AI芯片研发量产,百度造芯为什么这么快?
  2. 【转】ionic run android 成功launch success,但是genymotion虚拟机没有显示
  3. Java与.NET 的Web Services相互调用
  4. 牛客网暑期ACM多校训练营(第三场)A - PAXM Team(01背包)
  5. LinkedList 的实现原理浅析
  6. 26-- 转换成小写字母
  7. LeetCode 374. 猜数字大小(二分查找)
  8. BugkuCTF-WEB题网站被黑
  9. 【C语言】构建一个校园交通查询系统程序。能够规划出任意出发地和目的地之间的最短路径。...
  10. 在ubuntu用wget下载多个文件,axel多线程下载(多线程超级快)
  11. 【机器学习基础】正规方程法(Normal equation)(正则化和非正则化)——吴恩达课程笔记
  12. SpringBoot 整合 Editormd(完整版)
  13. 关于bios+mbr还原uefi+gpt的系统后,出现进不去系统的问题
  14. 上传图片报Invalid filename错误
  15. 什么是OsmocomBB
  16. H5手机休闲游戏开发商有哪些?带你看遍北京游戏研发公司
  17. 通达信资金净流入公式_通达信主力资金净流入指标
  18. Android 源码编译技巧--模块清理
  19. python 批量下载财务数据_Python+Wind 批量下载上市公司年报 - Part 1/2
  20. 音乐专业又和计算机有关的吗,计算机音乐专业介绍

热门文章

  1. 测量人脸颜值的标准有哪些,人脸图像算法研究(2)
  2. Android冷启动和热启动
  3. 读书读书 吼吼~~
  4. delegate类型
  5. 微信红包助手php,php生成微信红包
  6. BIOS知识枝桠——FV
  7. 奥运英语[5] 很高兴再次见到你 Good to see you again.
  8. 直接购买同城跑腿系统源码,有什么好处呢?
  9. Android自动化埋点的实践
  10. APP应用推广方式:25个常见的空手套白狼方法