2013-05-04 166 views
1

我正在使用CRegKey从注册表中检索DWORD值。下面的代码返回0(BUF为零),但在注册表中的实际值是1354357483.QueryDWORDValue返回0

CRegKey reg; 
reg.Open(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion", KEY_READ); 
DWORD buf; 
DWORD s = reg.QueryDWORDValue("InstallDate", buf); 
if (s == ERROR_SUCCESS) { 
    reg.QueryDWORDValue("InstallDate", buf); 
    cout << hex << buf; 
} 

我怀疑它是与字符集,但到目前为止,我无法找到解决方案。我的项目字符设置设置为“未设置”。我尝试使用Unicode并使用宽字符串无济于事。

另外一个后续问题,有没有好的方法来从注册表中读取二进制数据并将其转换为std :: string?数据添加/丢失对于我所要做的并不是真正的问题。

+1

正在读取正确的值。 Backgrounder [is here](http://msdn.microsoft.com/en-us/library/windows/desktop/aa384232%28v=vs.85%29.aspx) – 2013-05-04 11:53:19

+0

有没有什么方法可以读取我的值请参阅32位应用程序的注册表编辑器? – cen 2013-05-04 14:34:01

+0

看左边。点击“访问备用注册表视图”。 – 2013-05-04 15:34:37

回答

0

Hans Passant是正确的。我的程序正在读取32位版本的注册表,而注册表显示的是64位版本,这就是值不匹配的原因。添加KEY_WOW64_64KEY标志来读取目标注册表解决了问题。