Как начинающий программист 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» отсутствует.
Опять же, я думаю, что это что-то простое, но я провожу пару часов, думая, что это могло бы быть, и я не могу понять это.
Код ошибки 998, преобразованный в читабельный Неверный доступ к ячейке памяти. Причина в том, что твоя команда (BYTE*)value
, переосмысливая значение 3 (LEDPORT
) в качестве адреса. (BYTE*)&value
исправляет вашу непосредственную проблему.
Других решений пока нет …