0

我已经编写了代码来读取和写入注册表,这在除 win2003 之外的所有操作系统中都可以正常工作。基本上在注册表(RegSetValueExW)中设置值之后,我能够正确读取它(RegQueryValueExW)。但是当我打开 regedit 时,我看到里面有一些垃圾字符。

打开使用

RegOpenKeyExW(HKEY_LOCAL_MACHINE, subKey , 0, KEY_WRITE | KEY_WOW64_64KEY, &_regKey);

设置:(值是 wstring)

::RegSetValueExW(_regKey, key, NULL, REG_MULTI_SZ, reinterpret_cast<const BYTE*>(value.c_str()), static_cast<DWORD>(value.length()*2 + 1));

查询:

::RegQueryValueExW(regKey, key, NULL, &type, reinterpret_cast<LPBYTE>(&value[0]), &valueLength);
4

2 回答 2

2

从 MSDN 手册页RegSetValueExW

对于 REG_MULTI_SZ 数据类型,字符串必须以两个字符结束。

您需要构造一个BYTE包含两个终止符的数组并将其传递给函数。

于 2012-06-20T05:58:34.907 回答
0

您应该使用(value.length() + 1)*2而不是value.length()*2 + 1.

于 2012-06-20T05:33:00.673 回答