一.问题描述
项目开发时,由于需要集成第三方DLL,第三方提供能够正常运行的Demo,试运行后,一切正常,将其代码移植到项目当中后,运行后却在调用接口时报错。截图如下:
二.问题解决思路
刚开始以为自己修改了,原封不动的使用第三方源码,也运行报错。
网上对应该问题也给出了不同的解答方案,相关的解决方案连接如下:C/C++ 错误处理(文档):未处理的异常: 0xC0000005: 读取位置 0x00000000 时发生访问冲突_Neo的专栏-CSDN博客环境:VS2005代码:#include "stdafx.h"//在stdafx.h添加include using namespace std;int _tmain(int argc, _TCHAR* argv[]){coutfor(int i=0;i{ wcout}cin.get();return 0;}错误:https://blog.csdn.net/neo_ustc/article/details/8847911?utm_source=blogxgwz6&utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_title~default-9.no_search_link&spm=1001.2101.3001.4242.6xxx.exe 中的 0x00000010 处最可能的异常: 0xC0000005: Access violation_Freethin的博客-CSDN博客编译运行,就出现了错误:0x4f466556处最可能的异常:0xC0000005:Accessviolation:但是我把工程清理一下,重新编译,运行,一切正常。(删掉Debug和release文件夹重新编译OK)...https://blog.csdn.net/weixin_45081534/article/details/90902626C/C++ 错误处理(文档):未处理的异常: 0xC0000005: 读取位置 0x00000000 时发生访问冲突_Neo的专栏-CSDN博客环境:VS2005代码:#include "stdafx.h"//在stdafx.h添加include using namespace std;int _tmain(int argc, _TCHAR* argv[]){coutfor(int i=0;i{ wcout}cin.get();return 0;}错误:https://blog.csdn.net/neo_ustc/article/details/8847911?utm_source=blogxgwz6&utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_title~default-9.no_search_link&spm=1001.2101.3001.4242.6 都没有解决我的问题。问题依然存在,通过对齐输入参数,也是没有问题的。最后想到,是不是项目配置不对导致的呢。按照这个思路,我对比了两个项目的配置参数,果然发现还是有点不同的。
两个工程的【调用约定】不一致,然后,将开发的项目【调用约定】设置成第三方Demo一致,软件能够正常运行。
网上百度了下【调用约定】,相关说明连接如下:
调用规则__stdcall与__cdecl_陈敏的博客-CSDN博客https://blog.csdn.net/colinchan/article/details/4478721常用的一些调用约定 - Sunshine - 博客园调用约定 调用约定 | 调用约定 | 参数压栈 | 平衡堆栈 | | | | | | _cdecl | 从右至左 | 调用者清理 | | _stdcall | 从右至左 | 自身清理 | | _fashttps://www.cnblogs.com/songyaqi/p/12075105.html