我在备份编约会信息的时候有一个recipients的接口要保存到EDB数据库里,我就用一个blob去存它.
用的是写索引的方法,先用一块固定大小的区域去写将要保存的值的长度,在扩展一块这么长的区域去保存这个值.但是第二次循环的时候就会丢掉一些数据.
大概是这样的:
pRecs->get_Count(&index);
for(int i = 1; i <= index; i++)
{
pRecs->Item(i, &pRec);
pRec->get_Name(&name);
.....
//把name写到字符串中valueStr,并得到他的长度valueLen
....
pOld = (PBYTE)realloc(*pBlob, 6); //pBlob是从外面传进来的一个BYTE ** 就是要往这里面写值,pOld也指向这块区域,但专门用来操作数据,以防在操作时丢失数据.
if (!pOld)
return false;
else
{
*pBlob = pOld;
pOld += dwCount; //dwCont是当前pBlob的长度.
}
memset(pOld, 0, valueLen);
CopyMemory(pOld, valueStr, valueLen);
dwCount += valueLen;
......
}
一个写值的过程大概就是这样了.
循环第一次的时候基本上没有问题,索引也写进去了,值也写进去了.
但第二次的时候,到第一个扩展内存空间的时候值就会掉丢几位,但索引不会有问题.而这次要写的值却正常写进去了.
VS2005 + WM6.0
请问这是为什么?
谢谢.