MyException - 我的异常网
当前位置:我的异常网» VC/MFC » 如何取注册表中的二进制值

如何取注册表中的二进制值

www.myexceptions.net  网友分享于:2013-04-10  浏览:9次
怎么取注册表中的二进制值
我取到的二进制值只能得到第一个值
DWORD dwType = 0;
TCHAR szValue[10000] = {0}; 
DWORD dwLength = 10000;
if (::RegQueryValueEx(hKEY, _T("Order"), 0, &dwType, (LPBYTE)szValue, &dwLength) != ERROR_SUCCESS)
{
RegCloseKey(hKEY);
return;
}
CString strValue = szValue;


我取得的是这个值,但是字符串显示第一个字符就断掉了,

我怎么取得全部的值?

------解决方案--------------------
2进制的值本来就不能作为string来处理,根据dwLength来判断数据有多长而不要用字符串的任何处理方式来处理2进制数据.
------解决方案--------------------
看 RegQueryValueEx MSDN的说明 
lpcbData 
If the buffer specified by lpData parameter is not large enough to hold the data, the function returns the value ERROR_MORE_DATA, and stores the required buffer size, in bytes, into the variable pointed to by lpcbData. 

可以先置长度为0,判断返回值为ERROR_MORE_DATA时,lpcbData包含了数据长度 
然后 new 再RegQueryValueEx读  delete…… 


------解决方案--------------------
你用BYTE[]来接收,然后按照需求转成CString类型的
------解决方案--------------------
既然是二进制数据,就没法保证里面放的是可见字符,也没有字符串结束符('\0'),所以不能直接转换为字符串类型。
------解决方案--------------------
注册表里的二进制就跟二进制文件一样,什么都能保存,比如自己定义的结构体,或者字符串,数组等,甚至你把整个文件都可以保存在里面。一般都是用 BYTE 类型数组来读取,然后根据需要进行对应的转换。

文章评论

软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有