作为一名初学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”不是。
同样,我认为这是直截了当的,但我花了几个小时思考它可能是什么,我无法弄明白。
答案 0 :(得分:5)
转换为人类可读的错误代码998是对内存位置的无效访问。原因是您的演员(BYTE*)value
,将值3(LEDPORT
)重新解释为地址。 (BYTE*)&value
解决了您的问题。