C ++ RegSetValueEx给出了问题

时间:2015-12-27 15:24:12

标签: c++ registry

我正在使用RegSetValueEx设置注册表项。问题是它只写入前2个字符。我可以使用RegSetValueExA(ANSI版本),但我的项目在属性中设置为Unicode,因此我想使用RegSetValueExRegSetValueExW

#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"

1 个答案:

答案 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