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呢
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呢
解决方案 »
- mfc debug和release版本读取文本数据不一样问题出在哪里
- COM可连接对象
- 串口接手机编程,单步正常,直接运行读不出东西。
- ATL控件有内在的初始化和退出函数吗?
- vc里的MFC和 SDK有什么区分第一次学vc
- 关于PostQuitMessage
- 局域网中的视频采集问题,高分相送,谢谢您的帮助!
- CMyView::OnitialUpdate()里面new的对象在哪儿关闭?
- 哪位高手帮我draw一下,为什么我总draw不对?来者有分
- “LINK : warning LNK4089: all references to "SHELL32.dll" discarded by /OPT:REF咋”解决撒!
- 没分了,请大家原谅!用wininet如何得到HTTP的请求何反映消息数据流?
- 编程遇到一个小问题,本人不解,请教。。。。。。。。
在调用RegQueryValueEx前应该初始化DataSize为你的缓冲区长度。该值返回后指出实际数据的长度,
如果调用前的DataSize比实际数据长度要小,则返回ERROR_MORE_DATDataSize指出的是经字节为单位的长