网友提问:
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 要改成DWORD,DWORD不能是小写。。。
VS书写标准化要求。