在VC6里运行没有问题,但是在VS2012里面运行就不行(有代码)

网友提问:

void CRevealREGDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
HKEY hKey;
DWORD value= 0;
CString subkey="Control Panel\\Keyboard";
::RegCreateKey(HKEY_CURRENT_USER,subkey,&hKey);
::RegSetValueEx(hkey,"KeyboardDelay",NULL,REG_SZ,(BYTE*)&value,sizeof(Dword));
::RegCloseKey(hKey);
MessageBox("修改成功");
}

在VC6里运行没有问题,可以正常使用 
但是在VS2012里面运行就不行 
下面是错误代码:

1>------ 已启动生成: 项目: RevealREG, 配置: Debug Win32 ------ 1> stdafx.cpp 1> RevealREGDlg.cpp 1>d:\vs c++\revealreg\revealreg\revealregdlg.cpp(161): error C2440: “初始化”: 无法从“const char [23]”转换为“ATL::CStringT<BaseType,StringTraits>” 1> with 1> [ 1> BaseType=wchar_t, 1> StringTraits=StrTraitMFC_DLL<wchar_t> 1> ] 1> class“ATL::CStringT<BaseType,StringTraits>”的构造函数声明为“explicit” 1> with 1> [ 1> BaseType=wchar_t, 1> StringTraits=StrTraitMFC_DLL<wchar_t> 1> ] 1>d:\vs c++\revealreg\revealreg\revealregdlg.cpp(163): error C2065: “hkey”: 未声明的标识符 1>d:\vs c++\revealreg\revealreg\revealregdlg.cpp(163): error C2065: “Dword”: 未声明的标识符 1>d:\vs c++\revealreg\revealreg\revealregdlg.cpp(163): error C2070: “'unknown-type'”: 非法的 sizeof 操作数 1>d:\vs c++\revealreg\revealreg\revealregdlg.cpp(165): error C2664: “CWnd::MessageBoxW”: 不能将参数 1 从“const char [9]”转换为“LPCTSTR” 1> 与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换 1> RevealREG.cpp 1> 正在生成代码... ========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========

大神回答:

VC6中的双引号串到了VS里    _T("Control Panel\\Keyboard"); 
我最近也遇到过这种情况,至于错误里面的未声明标识符咱们就不提了,楼主自己改过来。

关键在于“不能将参数 1 从“const char [9]”转换为“LPCTSTR””这个错误,需要:

在项目属性里面找到项目默认值下面的字符集, 将其换为使用多字节字符集

这样就可以解决这个问题了。 


多字节的这个问题我在网上已经找过,但是我想问题不是出在这个 
还是VS和VC6的写法上有很大不同。。。你的Dword 要改成DWORDDWORD不能是小写。。。 

VS书写标准化要求。