RegOpenKeyEx и RegSetValueEx терпят неудачу, но я не знаю почему

Как начинающий программист C ++ я хочу установить значение в реестре Windows. Я создал эту реализацию учебника, чтобы выполнить это, но я всегда получаю ошибку 998 обратно. Думаю, мне не хватает чего-то очень простого и понятного, но я не могу понять, что это такое.

Запуск этого кода от имени обычного пользователя или администратора не имеет значения.

#define LEDPORT 3
#define SUBKEY "SOFTWARE\\PATH\\OTHERPATH\\"
HKEY key;
if(RegCreateKey(HKEY_LOCAL_MACHINE,  TEXT(SUBKEY), &key) == ERROR_SUCCESS)
{
HKEY createKey;
DWORD value = LEDPORT;

if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, TEXT(SUBKEY), NULL, KEY_ALL_ACCESS, &createKey) == ERROR_SUCCESS){

// retVal returns error 998 and the value isn't set
int retVal = RegSetValueEx(createKey, TEXT("PortNumber"), NULL, REG_DWORD, (BYTE *)value, sizeof(value));RegCloseKey(createKey);
}
}

Фактически это создает упомянутый ключ в LocalMachine \ Software \ Path \ OtherPath, но значение DWORD «PortNumber» отсутствует.

Опять же, я думаю, что это что-то простое, но я провожу пару часов, думая, что это могло бы быть, и я не могу понять это.

1

Решение

Код ошибки 998, преобразованный в читабельный Неверный доступ к ячейке памяти. Причина в том, что твоя команда (BYTE*)value, переосмысливая значение 3 (LEDPORT) в качестве адреса. (BYTE*)&value исправляет вашу непосредственную проблему.

5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]