1

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

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 的好方法?对于我正在尝试做的事情,数据添加/丢失并不是真正的问题。

4

1 回答 1

0

汉斯·帕桑特是对的。我的程序正在读取 32 位版本的注册表,而 regedit 显示的是 64 位版本,这就是值不匹配的原因。添加 KEY_WOW64_64KEY 标志来读取预期的注册表解决了这个问题。

于 2013-05-08T10:01:31.380 回答