紧急!帮我看看为什么第一步通过,第二步就不能通过呢?(注册表相关)附源代码。
写了一个从注册表读数据的程序。如果该键值不存在就创建之。如果存在就读取之。
问题是读取的时候,第一步读取name都是正常的,但是读取address的时候,RegQueryValueEx就返回错误。
各位兄弟,帮我看看程序。看看那里出错或者用错了。十分感谢。(比较着急)
BOOL CTryregDlg::GetRegInfo(CString &strOne, CString &strTwo)
{
HKEY hKey;
LPCTSTR lpPath="Software\\CSCW\\TmVconf\\TmStar\\";
DWORD dwDisposition=REG_CREATED_NEW_KEY;
long ret0 = RegCreateKeyEx( HKEY_LOCAL_MACHINE, lpPath, 0,
NULL,REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS,
NULL, &hKey, &dwDisposition);
if(ret0!=ERROR_SUCCESS)
{
TRACE0(_T("第一步:打开或者创建就失败了。\n"));
return FALSE;
}
if ( dwDisposition == REG_CREATED_NEW_KEY)
{
LPBYTE lpKeyValue;
DWORD cbBufferSize=80;
lpKeyValue = (unsigned char *)"";
long ret1 = RegSetValueEx(hKey, TEXT("name"), 0,
REG_SZ, lpKeyValue, cbBufferSize);
if (ret1 != ERROR_SUCCESS) {
TRACE0(_T("不行呀,我创建不了name这个键值。\n"));
RegCloseKey(hKey);
return FALSE; }
long ret2 = RegSetValueEx(hKey, TEXT("address"), 0,
REG_SZ, lpKeyValue, cbBufferSize);
if (ret2 != ERROR_SUCCESS) {
TRACE0(_T("不行呀,我创建不了address这个键值。\n"));
RegCloseKey(hKey);
return FALSE; }
RegCloseKey(hKey);
return FALSE;
}
else
{
LPBYTE lpKeyValue1;
DWORD datatype=REG_SZ ;
DWORD cbBufferSize=80;
long ret1 =::RegQueryValueEx( hKey, TEXT("name"), NULL,
&datatype, lpKeyValue1, &cbBufferSize);
if(ret1 != ERROR_SUCCESS)
{
MessageBox("错误: 无法查询有关注册表name信息!\n");
::RegCloseKey(hKey);
return false;
}
LPBYTE lpKeyValue2;
long ret2=::RegQueryValueEx( hKey, TEXT("address"), NULL,
&datatype, lpKeyValue2, &cbBufferSize);
if(ret2!=ERROR_SUCCESS)
{
MessageBox("错误: 无法查询有关注册表address信息!\n");
::RegCloseKey(hKey);
return false;
}
strOne = CString(lpKeyValue1);
strTwo = CString(lpKeyValue2);
::RegCloseKey(hKey);
return true;
}
}