我正在使用RegSetValueEx
设置注册表项。问题是它只写入前2个字符。我可以使用RegSetValueExA
(ANSI版本),但我的项目在属性中设置为Unicode,因此我想使用RegSetValueEx
或RegSetValueExW
。
#include <iostream>
#include <Windows.h>
HKEY hKey;
int main()
{
RegCreateKeyEx(HKEY_CURRENT_USER, L"SOFTWARE\\stuff", 0, NULL, NULL, KEY_ALL_ACCESS, NULL, &hKey, NULL);
RegSetValueEx(hKey, L"Test", 0, REG_SZ, (const BYTE*)L"test", strlen("test"));
system("PAUSE");
return 0;
}
注册表中的输出为"te"
而不是"test"
。
答案 0 :(得分:1)
RegSetValueEx
的最后一个参数必须是值的字节大小,包括终止空值。你给出了字符长度(每个字符需要两个字节),不包括null。
sizeof(L"test")
可行,或者您可以使用(strlen("test")+1) * sizeof(wchar_t)
请参阅https://msdn.microsoft.com/en-us/library/windows/desktop/ms724923(v=vs.85).aspx