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