VC2005环境注册表读写问题请教 VC2002和2005读写注册表是不是有区别,我同样的程序,可在VC2002里可以,取在VC2005不行?读写的出来的长度都不对.我用的RegQueryValueEx和RegSetValueEx 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 没有不同,主义ANSI和UNICODE的区别 具体怎么区分?请帮我看看下边是需要变化,这个在VC2002可以,在VC2005读出来的长度就不对了///////////HKEY hKey;LONG nResult = 0;DWORD dwSize = 0; // 数据长度TCHAR lpSubKey[] = _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\K2cenGAD_is1");TCHAR lpValueName[] = _T("Inno Setup: App Path");///////////////nResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE, // 主键 lpSubKey, // 子键 NULL, KEY_READ, // 权限 &hKey); // Handleif( nResult != ERROR_SUCCESS ){ return "";}///////////////////RegQueryValueEx(hKey, lpValueName, NULL, NULL, NULL, &dwSize); // 缓冲区长度// 动态分配缓冲区LPBYTE dataBuf = new BYTE[dwSize];RegQueryValueEx(hKey, lpValueName, NULL, NULL, dataBuf, &dwSize);// 关闭RegCloseKey(hKey);CString str_owner=CString(dataBuf); // 释放缓冲区delete[] dataBuf;return str_owner; 长度怎么不对?VC 2005默认是UNICODE的,也就是说返回的是UNICODE字符串,最后这个CString构造函数应该不对。 我这里是用UNICODE字符串,做的ARX程序应该怎样处理呢?我对这个不怎么明白,请大家帮帮忙哈,我这里读写都不对 朋友,问题出在CString str_owner=CString(dataBuf); 在VC2005中,默认是UNICODE,dataBuf获得的信息是正确的,但保存方式:比如"D:\"为 44 00 3A 00 5C 00,而CString(dataBuf),把44 后面的00当成中止符了,所以你的str_owner="D",就出错了.要改有两种办法.第一:CString str_owner; str_owner.Append((WCHAR*)dataBuf,dwSize);第二种...CString strPath;LONG lRet1 = RegQueryValueEx( hKey, lpValueName,NULL, NULL, (LPBYTE)strPath.GetBuffer( dwSize ), &dwSize );strPath.ReleaseBuffer();也行. 非常感谢bestoml ,非常感谢大家我现在明白了哈 CMemDC类 usb转串口问题 怎样把一个DialogBar放到一个子窗口 ESC键为何不响应对话框关闭却清空对话框中的一个ListBox? 如何实现图形循环移动? VC开发数据库能与Dephi相比吗?谁更更适合于数据库的开发呢? 只怪数学没学好 如何得到窗口中的按钮的句柄? 成员列表出不来!? 怎么用vc使用vc编写的dll?快点帮帮我! 如何调用系统服务程序? vc 读取excel数据,并调用计算逆矩阵函数
请帮我看看下边是需要变化,这个在VC2002可以,在VC2005读出来的长度就不对了///////////
HKEY hKey;
LONG nResult = 0;
DWORD dwSize = 0; // 数据长度TCHAR lpSubKey[] = _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\K2cenGAD_is1");
TCHAR lpValueName[] = _T("Inno Setup: App Path");///////////////nResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE, // 主键
lpSubKey, // 子键
NULL,
KEY_READ, // 权限
&hKey); // Handleif( nResult != ERROR_SUCCESS )
{
return "";
}///////////////////
RegQueryValueEx(hKey,
lpValueName,
NULL,
NULL,
NULL,
&dwSize); // 缓冲区长度// 动态分配缓冲区
LPBYTE dataBuf = new BYTE[dwSize];RegQueryValueEx(hKey,
lpValueName,
NULL,
NULL,
dataBuf,
&dwSize);// 关闭
RegCloseKey(hKey);CString str_owner=CString(dataBuf);
// 释放缓冲区
delete[] dataBuf;
return str_owner;
应该怎样处理呢?我对这个不怎么明白,请大家帮帮忙哈,我这里读写都不对
在VC2005中,默认是UNICODE,dataBuf获得的信息是正确的,但保存方式:比如"D:\"为 44 00 3A 00 5C 00,而CString(dataBuf),把44 后面的00当成中止符了,所以你的str_owner="D",就出错了.
要改有两种办法.
第一:CString str_owner; str_owner.Append((WCHAR*)dataBuf,dwSize);
第二种...
CString strPath;
LONG lRet1 = RegQueryValueEx( hKey, lpValueName,NULL, NULL, (LPBYTE)strPath.GetBuffer( dwSize ), &dwSize );
strPath.ReleaseBuffer();
也行.
我现在明白了哈