RegQueryValueEx записывает в буфет только 1 байт

HKEY hKey;
char keyData[256] = { 0 };
DWORD keysize = sizeof(keyData);
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, L"Software\\hrz", 0, KEY_QUERY_VALUE, &hKey) == ERROR_SUCCESS)
{
    if (RegQueryValueEx(hKey, L"Key", NULL, NULL, (LPBYTE)keyData, &keysize) == ERROR_SUCCESS)
    {
      cout << keyData;
    }
}
RegCloseKey(hKey);

Почему в keyData записывается только первый байт того что должно быть?Я знаю, что вместо типа char должен быть wchar_t,но ведь LPBYTE это указатель на байт,а char это как раз байт.А wchar_t это 2 байта,но с wchar_t работает, а с char нет...


Ответы (1 шт):

Автор решения: Whitehorse

Как я разобрался,существует 2 версии RegOpenKeyEx:RegOpenKeyExA и RegOpenKeyExW которые выбираются в зависимости от настроек проекта.Я использовал настройку проекта для UNICODE и использовал буфер типа char,в который писалось не по 1 байту а по 2(тип wchar_t).

→ Ссылка