VS2019 调用大漠插件免注册方法引发异常 0x00000000 处(位于 DMSPACE1.exe 中)引发的异常: 0xC0000005: 执行位置 0x00000000 时发生访问冲突。

0x00000000 处(位于 DMSPACE1.exe 中)引发的异常: 0xC0000005: 执行位置 0x00000000 时发生访问冲突。
VS2019 调用大漠插件免注册方法引发异常 0x00000000 处(位于 DMSPACE1.exe 中)引发的异常: 0xC0000005: 执行位置 0x00000000 时发生访问冲突。_第1张图片
本来这是VS2010的注册大漠插件的代码,可复制到VS2019就报这样的错。。。昨天查百度搞了一下午,今天查csdn又搞了一天…还下载了很多别人的注册代码都是骗分的…最后自己解决了…心累啊.记录下 顺便也许能帮助遇到同样问题的新手 OK!
靠,刚才激动的居然没写解决方就发布了…
【解决方法】
项目名称右键–属性页–配置属性–高级–字符集–从Unicode字符集 改成 【使用多字节字符集】
方便新手,在上个图:
VS2019 调用大漠插件免注册方法引发异常 0x00000000 处(位于 DMSPACE1.exe 中)引发的异常: 0xC0000005: 执行位置 0x00000000 时发生访问冲突。_第2张图片

2021/2/3 再次出现这个这个错误,这次工程是UNICODE字符集的,不能使用多字节集解决问题了!
所以,逼着自己找出具体错误点,终于找到:
错误分类是 指针为0。
错误出现的代码是:
#ifdef UNICODE
#define SetDllPath _T(“SetDllPathW”)
#else
#define SetDllPath _T(“SetDllPathA”)
#endif
DWORD dwFun = (DWORD)GetProcAddress(hmod, (LPCSTR)SetDllPath);//【错误行】
//=======================================================
把宏展开,编译不通过,然后在加个括号,这行代码是这样的:
DWORD dwFun = (DWORD)GetProcAddress(hmod, (LPCSTR)(_T(“SetDllPathW”)));
知道这行代码如何改就正确了,但不知道原因,所以去看了这篇文章:
c++ 彻底搞懂 wchar_t WCHAR LPCSTR PCSTR TCHAR
https://blog.csdn.net/weixin_42837024/article/details/106282524
彻底懂了:
因为,参数2 需要的是LPCSTR是指向char类型的字符串的指针,
而 写成这样_T(“SetDllPathW”) 等同于L"SetDllPathW" ,是个宽字节字符串,
所以出错了,导致获取指针失败返回为0,最终出错弹出错误C000005.

应该改为:
DWORD dwFun = (DWORD)GetProcAddress(hmod, (LPCSTR)(“SetDllPathW”));
再简化:
DWORD dwFun = (DWORD)GetProcAddress(hmod, “SetDllPathW”);
上面的宏也是抄的网上的代码用的,现在懂了应该这样写:
#ifdef UNICODE
#define SetDllPath “SetDllPathW”
#else
#define SetDllPath “SetDllPathA”
#endif
DWORD dwFun = (DWORD)GetProcAddress(hmod, SetDllPath);

OK !弄懂字符串知识点,并修改了别人的错误代码,解决了问题,真开心~哈哈!。真的好喜欢编程,好喜欢C++!

你可能感兴趣的:(报错/错误,VS2019,大漠插件,c++,bug,经验分享)