我有一个操作,是要从注册表里面读取一个字符串值。代码如下:
//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写的,应该和这没有关系。