char szStr[4096];
DWORD dataSize;
memset(szStr,0,sizeof(4096));
szStr[4095]='\0';
DWORD KeyType;
long ErrorCode=0;
if((ErrorCode=RegQueryValueEx(hResult,0,0,&KeyType,(BYTE*)szStr,&dataSize))!=ERROR_SUCCESS)
{  //在访问到有一个键值的时候发生错误,总是返回ERR_MORE_DATA
   //这个时候szStr为空
   //但实际上我的这个键值和其他键值是一样。其他的都可以成功访问,不知道这个为什么不行
   //但是奇怪的不是这里,在后
if(ErrorCode==ERROR_MORE_DATA)
{//当我查询的时候得出的是ERROR_MORE_DATA我就继续查询
 //而这个时候我使用了一个新的变量MoreData
XTRACE("requery\r\n");
BYTE *MoreData;
MoreData=new BYTE[dataSize+1];
memset(MoreData,0,dataSize+1);
MoreData[dataSize]='\0';
if(RegQueryValueEx(hResult,0,0,&KeyType,MoreData,&dataSize)!=ERROR_SUCCESS)
{
delete[] MoreData;
XTRACE("requery failure\r\n");
RegCloseKey(hResult);
return FALSE;
}
delete[] MoreData;
}//所有到这里都是对MoreData操作对于szStr
}
else
{//到了这里szStr居然有值这个我就想不通了
RegCloseKey(hResult);
szStr[dataSize+1]='\0';
CString str(szStr);
CString DescStr=PROGRAM_ID;
DescStr+=extFileName;
XTRACE("str is %s DescStr is %s they are %d\r\n",str,DescStr,str==DescStr);
if(str!=DescStr)
{//而且还是正确的
return FALSE;
}
else
{
return TRUE;
}
}
}
还请哪位帮忙看看是怎么回事
我是想第一次查询就OK那该多好,而且我的返回值根本不可能有4096这么多,怎么会ERROR_MORE_DATA呢