使用此代码段:
TCHAR buf[255] = {0};
DWORD dwBufSize = sizeof(buf);
HKEY hKey = 0;
DWORD dwType = REG_DWORD;
if ( RegOpenKeyEx( HKEY_CURRENT_USER, TEXT("Software\\Developer\\KGReader"), 0, KEY_QUERY_VALUE, &hKey) == ERROR_SUCCESS)
{
if( RegQueryValueEx( HKEY_CURRENT_USER, TEXT("Software\\Developer\\KGReader\\ComPort"), 0, &dwType, (LPBYTE)buf, &dwBufSize ) == ERROR_SUCCESS )
{
nrPort = _wtoi(buf);
}
if( RegQueryValueEx( HKEY_CURRENT_USER, TEXT("Software\\Developer\\KGReader\\KGID"), 0, &dwType, (LPBYTE)buf, &dwBufSize ) == ERROR_SUCCESS )
{
nrCentrala = _wtoi(buf);
}
}
hKey
方法没有将值传递给RegOpenKeyEx
。RegOpenKeyEx
返回ERROR_SUCCES,但RegQueryValueEx
返回2(ERROR_FILE_NOT_FOUND)。 KGID
和ComPort
确实存在,我自己添加了它,我仔细检查了路径。答案 0 :(得分:4)
将hKey
来自RegOpenKeyEx()
来自HKEY_CURRENT_USER
来自RegQueryValueEx()
来自RegQueryValueEx()
来自if( RegQueryValueEx(hKey,
TEXT("ComPort"),
0,
&dwType,
(LPBYTE)buf,
&dwBufSize ) == ERROR_SUCCESS )
。 buf
的第二个参数是值的名称,而不是路径。
例如:
dwBufSize
在第二次致电RegQueryValueEx
之前,请务必重置memset(buf, 0, sizeof(buf));
dwBufSize = sizeof(buf);
和RegOpenKeyEx()
:
RegQueryValueEx()
出于错误报告的目的,您应该保存RegOpenKeyEx()
和{{1}}函数的返回值,以便可以了解失败原因。
发布的代码可能不完整,但如果对{{1}}的调用成功,则会确保调用RegCloseKey(hKey)
。
答案 1 :(得分:1)
RegQueryValueEx
的第一个参数应该是HKEY
打开的RegOpenKeyEx
。另外,第二个参数应该只是一个值名称,而不是完整路径:
if( RegQueryValueEx( hKey, TEXT("ComPort"), 0, &dwType,
(LPBYTE)buf, &dwBufSize ) == ERROR_SUCCESS )