我有一个操作,是要从注册表里面读取一个字符串值。代码如下:
//HKEY key;
RegClass::RegClass()
{
RegCreateKeyEx(
HKEY_LOCAL_MACHINE,
_T("SOFTWARE\\Killer"),
0,
NULL,
REG_OPTION_NON_VOLATILE,
KEY_ALL_ACCESS,
NULL,
&key,
NULL);
}RegClass::~RegClass()
{
RegCloseKey(key);
}CString RegClass::QueryPassword()
{
CString str=_T("");
DWORD cb=0;
LPBYTE lpb=new BYTE[32];
int n=RegQueryValueEx(key,_T("psd"),0,NULL,lpb,&cb);
if(n!=ERROR_SUCCESS)
{
RegSetValueEx(key,_T("psd"),0,REG_SZ,(LPBYTE)_T("jrl"),3*sizeof(TCHAR));
str=_T("jrl");
}
else
{
str=LPTSTR(lpb);
}
delete lpb;
return str;
}
我的本意是如果查询到psd的值,就直接返回该值,否则新建一个psd的值。但现在无论该值存不存在,RegQueryValueEx总是返回非零值,于是每次都会把psd的值改回“jrl”。我用FormatMessage查询过错误代码,告诉我“操作成功完成”。不知道是哪里出了问题。
另外,这个程序是用WTL写的,应该和这没有关系。
//HKEY key;
RegClass::RegClass()
{
RegCreateKeyEx(
HKEY_LOCAL_MACHINE,
_T("SOFTWARE\\Killer"),
0,
NULL,
REG_OPTION_NON_VOLATILE,
KEY_ALL_ACCESS,
NULL,
&key,
NULL);
}RegClass::~RegClass()
{
RegCloseKey(key);
}CString RegClass::QueryPassword()
{
CString str=_T("");
DWORD cb=0;
LPBYTE lpb=new BYTE[32];
int n=RegQueryValueEx(key,_T("psd"),0,NULL,lpb,&cb);
if(n!=ERROR_SUCCESS)
{
RegSetValueEx(key,_T("psd"),0,REG_SZ,(LPBYTE)_T("jrl"),3*sizeof(TCHAR));
str=_T("jrl");
}
else
{
str=LPTSTR(lpb);
}
delete lpb;
return str;
}
我的本意是如果查询到psd的值,就直接返回该值,否则新建一个psd的值。但现在无论该值存不存在,RegQueryValueEx总是返回非零值,于是每次都会把psd的值改回“jrl”。我用FormatMessage查询过错误代码,告诉我“操作成功完成”。不知道是哪里出了问题。
另外,这个程序是用WTL写的,应该和这没有关系。
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货