CObArray序列化问题
//环境:VS2003
//首先写了一个可支持序列化的类CItem:
Class CItem : public CObject
{
DECLARE_SERIAL(CItem)
public:
CItem();
~CItem();
...
CString m_FilePathName;
void Serialize(CArchive& ar);
}
//实现
IMPLEMENT_SERIAL(CItem,CObject,1)
void CItem::Serialize(CArchive& ar)
{
if(ar.IsStoring())
{
ar < <m_FilePathName;
}
else
{
ar> > m_FilePathName;
}
}
//然后在文档类声明一个CObArray对象:
CObArray m_obArray;
//然后在视类的一个消息响应函数中:
void CMyView::OnAddFile()
{
CItem *item = new CItem(m_FilePathName);
GetDocument()-> m_obArray.Add(item);
}
//接着在文档类的串行化中存储
void CMyDoc::Serialize(CArchive& ar)
{
if (ar.IsStoring())
{
// TODO: 在此添加存储代码
int nCount = m_obArray.GetSize();
ar < <nCount;
for(int i=0;i <nCount;i++)
{
ar < <m_obArray.GetAt(i);
}
}
else
{
// TODO: 在此添加加载代码
}
}
调试的时候,先往m_obArray中加入一个对象,再保存,结果提示RCMMP.exe 中的 0x7c2407d9 (mfc71d.dll) 处未处理的异常: 0xC0000005: 读取位置 0xcccccccc 时发生访问冲突 。
位置是void CArchive::WriteObject(const CObject* pOb)中的这一句:
CRuntimeClass* pClassRef = pOb-> GetRuntimeClass();
同时Debug到文档类的ar < <m_obArray.GetAt(i);处,发现m_obArray的m_pData的_vfptr的值为0xcccccccc,同时_vfptr下还有5个项:[0][1][2][3][4]都显示CXX0030: 错误: 无法计算表达式的值*
看不明白,请高手指点~另外CItem类的Serialize函数没有被执行到
在线等,谢谢
[解决办法]
for(int i=0;i <nCount;i++)
{
m_obArray.GetAt(i)-> Serilize(ar);
}