底下这段程序可以顺利的向注册表添加 二进制值
但是我在成功添加后从注册表那重新获取回来的时候 
发现... 与原来添加的数据好像不是很相符.
我是将 二进制数据 转换 成 DWORD来进行比较的? 
请问为什么转换后的数据会不相符,或者有没有什么更好的办法.
来比较他们.==================================================template<class Any>
void AddKey(HKEY hKey,LPTSTR pKeyName,LPCTSTR lpSubkey,Any dwKeyValue[],int n);template<class Dny>
DWORD DetectKey(HKEY hKey,LPTSTR pKeyName,LPCTSTR lpSubkey,Dny dwKeyValue[],int n);void main()
{
BYTE bValues[] = {0x00,0x5a,0x03,0x00,0x73,0xc9,0x78,0xa1,0xa1,0x04,0xcb,0x01};
DWORD Vsize = sizeof(bValues);AddKey(HKEY_CURRENT_USER ,"SOFTWARE\\MySoftware\\123456","Test",bValues,Vsize);
DWORD Detect = DetectKey(HKEY_CURRENT_USER ,"SOFTWARE\\MySoftware\\123456","Test",bValues,Vsize);template<class Any>
void AddKey(HKEY hKey,LPTSTR pKeyName,LPCTSTR lpSubkey,Any dwKeyValue[],int n)
{
using namespace std;
HKEY hSubKey;
// 创建键
RegCreateKey(hKey,pKeyName,&hSubKey);
// 设置键值
if( ERROR_SUCCESS != RegSetValueEx(
hSubKey,
lpSubkey,
0,
REG_BINARY,
dwKeyValue,
n))
{
cout <<"添加 失败\n";
}
else
{
cout << "添加修复完毕...\n";
}
}template<class Dny>
DWORD DetectKey(HKEY hKey,LPTSTR pKeyName,LPCTSTR lpSubkey,Dny dwKeyValue[],int n)
{
using namespace std;
HKEY hTestKey;
DWORD dwRtn;
char value[255];  dwRtn = RegOpenKeyEx(hKey,
pKeyName,
0,
KEY_READ | KEY_WRITE,
&hTestKey); if (dwRtn==0)
{
DWORD BufferSize = BUFFER; 
dwRtn = RegGetValue(hKey,
pKeyName,
lpSubkey,
RRF_RT_ANY,
NULL,
(PVOID)&value,
&BufferSize);  DWORD a = (DWORD)value;
DWORD b = (DWORD)dwKeyValue; if(a==b)
{
/*cout << value << "\n";*/
cout << a << "\n";
cout << b << "\n";
}
else
{
cout << "数值错误\n";
dwRtn = -1;
}

else
{
cout << "路径不存在..\n";
}
return dwRtn;
}
}

解决方案 »

  1.   

    RegGetValue读出来的值不一定就是DWORD大小,要根据BufferSize的大小分配空间,可以先执行RegGetValue一次,将pvData设为null,RegGetValue会返回ERROR_MORE_DATA,并将所需的内存大小存储在pcbData中,使用malloc分配pcbData 大小的空间然后再执行RegGetValue
      

  2.   


    POINT pt;
    DWORD dwSize = sizeof(POINT);
    RegQueryValueEx(hKey, ValueName, NULL, NULL, (LPBYTE)&pt, &dwSize); 试下这样。