0x00000000 處(位于 DMSPACE1.exe 中)引發(fā)的異常: 0xC0000005: 執(zhí)行位置 0x00000000 時(shí)發(fā)生訪問沖突。  本來這是VS2010的注冊(cè)大漠插件的代碼,可復(fù)制到VS2019就報(bào)這樣的錯(cuò)。。。昨天查百度搞了一下午,今天查csdn又搞了一天…還下載了很多別人的注冊(cè)代碼都是騙分的…最后自己解決了…心累啊.記錄下 順便也許能幫助遇到同樣問題的新手 OK! 靠,剛才激動(dòng)的居然沒寫解決方就發(fā)布了… 【解決方法】 項(xiàng)目名稱右鍵–屬性頁(yè)–配置屬性–高級(jí)–字符集–從Unicode字符集 改成 【使用多字節(jié)字符集】 方便新手,在上個(gè)圖: 
2021/2/3 再次出現(xiàn)這個(gè)這個(gè)錯(cuò)誤,這次工程是UNICODE字符集的,不能使用多字節(jié)集解決問題了! 所以,逼著自己找出具體錯(cuò)誤點(diǎn),終于找到: 錯(cuò)誤分類是 指針為0。 錯(cuò)誤出現(xiàn)的代碼是: #ifdef UNICODE #define SetDllPath _T(“SetDllPathW”) #else #define SetDllPath _T(“SetDllPathA”) #endif DWORD dwFun = (DWORD)GetProcAddress(hmod, (LPCSTR)SetDllPath);//【錯(cuò)誤行】 //======================================================= 把宏展開,編譯不通過,然后在加個(gè)括號(hào),這行代碼是這樣的: DWORD dwFun = (DWORD)GetProcAddress(hmod, (LPCSTR)(_T(“SetDllPathW”))); 知道這行代碼如何改就正確了,但不知道原因,所以去看了這篇文章: c++ 徹底搞懂 wchar_t WCHAR LPCSTR PCSTR TCHAR https://blog.csdn.net/weixin_42837024/article/details/106282524 徹底懂了: 因?yàn)椋瑓?shù)2 需要的是LPCSTR是指向char類型的字符串的指針, 而 寫成這樣_T(“SetDllPathW”) 等同于L"SetDllPathW" ,是個(gè)寬字節(jié)字符串, 所以出錯(cuò)了,導(dǎo)致獲取指針失敗返回為0,最終出錯(cuò)彈出錯(cuò)誤C000005.
應(yīng)該改為: DWORD dwFun = (DWORD)GetProcAddress(hmod, (LPCSTR)(“SetDllPathW”)); 再簡(jiǎn)化: DWORD dwFun = (DWORD)GetProcAddress(hmod, “SetDllPathW”); 上面的宏也是抄的網(wǎng)上的代碼用的,現(xiàn)在懂了應(yīng)該這樣寫: #ifdef UNICODE #define SetDllPath “SetDllPathW” #else #define SetDllPath “SetDllPathA” #endif DWORD dwFun = (DWORD)GetProcAddress(hmod, SetDllPath);
OK !弄懂字符串知識(shí)點(diǎn),并修改了別人的錯(cuò)誤代碼,解決了問題,真開心~哈哈!。真的好喜歡編程,好喜歡C++!
|