一般出現這種BUG 的,是由於字符集的問題。在vs2005中有兩個字符集,Unicode 和 Muti-bye。
LPCTSTR在Multi-byte Character方式下與const char*等價,在Unicode方式下與const tchar*等價。所以在Unicode方式下對其賦值像下面這樣:
LPCTSTR location = _T("Software//");//加_T進行轉化
否則報錯:error C2440: “初始化”: 無法從“const char [10]”轉換爲“LPCTSTR”
同樣在Unicode方式下對於AfxMessageBox(_T("Software//"));
否則報錯: error C2665: “AfxMessageBox”: 2 個重載中沒有一個可以轉換所有參數類型
(關於Unicode 和Muti-byte 的區別,我想引用http://blog.csdn.net/Jackiezhw/archive/2009/02/17/3901685.aspx這個網址,已經有了相關的介紹。)
遇到這種BUG的修改方法爲:
1.中文版:
工程-》設置屬性-》配置屬性-》常規-》項目默認值-》字符集
注意:
原來是Unicode (安裝時的默認值)
改爲使用多字符集 。如下圖中彩色部分,自己看吧!
2.英文版:
Project-》Properties-》Configuration Properties-》General-》Project Defaults-》Character Set
代碼在VC6中沒問題.因爲它的代碼沒有按可編譯爲UNICODE版本的方式寫,而VS2005之後版本默認是UNICODE編碼的.所以所有使用到字串的地方都會出錯.
方法:修改VS2005之後版本的設置:選擇你的項目->屬性->常規->設置爲不使用UNICODE,發現設置爲多字節字符集也可以。發現用VS2005打開VC6的源代碼,轉換後是使用的多字節字符集。
在VS2013中,項目->屬性->常規->字符集:改爲“使用多字節字符集”即可。