首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

CObArray序列化有关问题

2012-01-15 
CObArray序列化问题//环境:VS2003//首先写了一个可支持序列化的类CItem:ClassCItem:publicCObject{DECLARE

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);
}

热点排行