打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
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++!

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
delphi7调用爱莉文验证码识别库
谈一个Kernel32当中的ANSI到Unicode转换的问题
【转】DLL中类的显式链接 - 柳北风儿~~~~~~~欲宇仙炅 - ITeye技术网站
向exe注入代码
HOOK API
进程、窗口句柄、文件属性、程序运行状态
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服