0

使用此代码段:

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);
    }

}
  1. 没有值传递给hKeyusingRegOpenKeyEx方法。
  2. 虽然RegOpenKeyEx返回 ERROR_SUCCES,但RegQueryValueEx返回 2 (ERROR_FILE_NOT_FOUND)。KGID确实存在,ComPort我自己添加了它们,我仔细检查了路径。
4

2 回答 2

4

hKey将从RegOpenKeyEx()调用中获得的值传递给RegQueryValueEx()函数,而不是HKEY_CURRENT_USER. to的第二个参数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()出于错误报告的目的,您应该保存and函数的返回值,RegQueryValueEx()以便知道失败的原因。

发布的代码可能不完整,但RegCloseKey(hKey)如果调用RegOpenKeyEx()成功,则会调用确保。

于 2012-09-05T07:34:39.907 回答
1

的第一个参数RegQueryValueEx应该是HKEY打开的RegOpenKeyEx。此外,第二个参数应该只是一个值名称,而不是完整路径:

if( RegQueryValueEx( hKey, TEXT("ComPort"), 0, &dwType,
                     (LPBYTE)buf, &dwBufSize ) == ERROR_SUCCESS )
于 2012-09-05T07:36:53.647 回答