RegQueryValueEx(hKeyUser, TEXT("User"), 0, &ulType, strUser, &ulLen);
/*
其中hKeyUser为一个已经打开的注册项.
另外的变量也都正确, 为什么这句话会出错?
*///当然, 如果只是这样就不奇怪了, 奇怪的是我使用这个句子两次的时候, 一切都正常了, 就是如下方式:
RegQueryValueEx(hKeyUser, TEXT("User"), 0, &ulType, strUser, &ulLen);//把这句删掉就出错了.
if(0 == RegQueryValueEx(hKeyUser, TEXT("User"), 0, &ulType, strUser, &ulLen))
{
    //可以执行到这里, 获得的内容也完全正常.
}

解决方案 »

  1.   


    我看了MSDN的代码, 都不要这样的, 直接一次读取注册表就成功了, 但是我这样却出错.
    假如我要读取一个注册项, 都要读取两次才成功, 否则一定错误, 各位能给小弟讲解一下原因吗?
      

  2.   

    试试下面这段代码如何:if ( RegOpenKeyEx(hkey, lpszPath, 0, KEY_QUERY_VALUE, &key) != ERROR_SUCCESS)
    throw -1;

    TCHAR szBuf[2048] = {0};
    DWORD dwBufLen = 2048;
    LONG lRet = RegQueryValueEx( key, lpszKey, NULL, NULL, (LPBYTE) szBuf, &dwBufLen);
    RegCloseKey(key);
      

  3.   

    char sz[_MAX_PATH];
    ULONG ulSize = _MAX_PATH;
    Access = ::RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\XXXX\\XXX", 0, KEY_READ, &hKey);
    if(Access == ERROR_SUCCESS) {
    LQuery = ::RegQueryValueEx(hKey,"XXXX", NULL, NULL, (LPBYTE)sz, &ulSize);
             if(LQuery != ERROR_SUCCESS) {
    ::RegCloseKey(hKey);
    }
      

  4.   

    RegQueryValueEx(hKeyUser, TEXT("User"), 0, &ulType, strUser, &ulLen);
    你的ultype的值没有赋或者不正确,然后try
      

  5.   

    确保OPEN后,
    把0改为NULL。
    RegQueryValueEx(hKeyUser, "User", NULL, &ulType, strUser, &ulLen);
      

  6.   

    错了, 我发现问题不是这些, 是RegCloseKey()有错.如: 
    //hKey为一个值x
    RegCloseKey(hKey);
    //hKey的值还没有变动.
      

  7.   

    RegOpenKeyEx(hBaseKey, strKeyPath, 0, KEY_QUERY_VALUE, &hKeyTemp);
    RegQueryValueEx(hKeyTemp, strKeyName, 0, 0, (LPBYTE)strKeyString, &ulLen);
    RegCloseKey(hKeyTemp);
    //到这里为止都是正确的.但是再打开的时候就出错了, 必须要RegQueryValueEx()函数执行两次才可以.
      

  8.   

    但是在RegCloseKey();之前就执行的话, 也会出错.