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))
{
//可以执行到这里, 获得的内容也完全正常.
}
我看了MSDN的代码, 都不要这样的, 直接一次读取注册表就成功了, 但是我这样却出错.
假如我要读取一个注册项, 都要读取两次才成功, 否则一定错误, 各位能给小弟讲解一下原因吗?
throw -1;
TCHAR szBuf[2048] = {0};
DWORD dwBufLen = 2048;
LONG lRet = RegQueryValueEx( key, lpszKey, NULL, NULL, (LPBYTE) szBuf, &dwBufLen);
RegCloseKey(key);
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);
}
你的ultype的值没有赋或者不正确,然后try
把0改为NULL。
RegQueryValueEx(hKeyUser, "User", NULL, &ulType, strUser, &ulLen);
//hKey为一个值x
RegCloseKey(hKey);
//hKey的值还没有变动.
RegQueryValueEx(hKeyTemp, strKeyName, 0, 0, (LPBYTE)strKeyString, &ulLen);
RegCloseKey(hKeyTemp);
//到这里为止都是正确的.但是再打开的时候就出错了, 必须要RegQueryValueEx()函数执行两次才可以.