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

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

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++!

  • 9
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值