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. RegOpenKeyExERROR_SUCCES を返しますが、 RegQueryValueEx2 (ERROR_FILE_NOT_FOUND) を返します。KGID存在し、ComPort自分で追加し、パスを再確認しました。
4

2 に答える 2

4

の代わりに、呼び出しからhKey取得したを関数に渡します。の 2 番目の引数は、パスではなく、値の名前です。RegOpenKeyEx()RegQueryValueEx()HKEY_CURRENT_USERRegQueryValueEx()

例えば:

if( RegQueryValueEx(hKey,
                    TEXT("ComPort"),
                    0,
                    &dwType,
                    (LPBYTE)buf,
                    &dwBufSize ) == ERROR_SUCCESS )

を2 回目に呼び出す前に、忘れずにリセットbufしてください。dwBufSizeRegQueryValueEx

memset(buf, 0, sizeof(buf));
dwBufSize = sizeof(buf);

エラー報告の目的で、RegOpenKeyEx()およびRegQueryValueEx()関数の戻り値を保存して、失敗の理由を明らかにする必要があります。

投稿されたコードは不完全かもしれませんが、呼び出しが成功したRegCloseKey(hKey)場合は が呼び出されることを確認してください。RegOpenKeyEx()

于 2012-09-05T07:34:39.907 に答える
1

への最初の引数は、によって開かれるRegQueryValueEx必要があります。さらに、2 番目の引数は、フル パスではなく、値の名前にする必要があります。HKEYRegOpenKeyEx

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