CSxj是一个继承CWnd的类,我在其中使用Serialize,存的时候可以,可读取时错误,是不是一定要CObject类才能用Serialize?void CSxj::Serialize(CArchive& ar)
{
    if (ar.IsStoring()) {
ar<<m_IP<<m_nChannel<<xPos<<yPos;

else{ 
ar>>m_IP>>m_nChannel>>xPos>>yPos;

}

解决方案 »

  1.   

    没贴完
    void CSxj::Serialize(CArchive& ar)
    {
        if (ar.IsStoring()) {
    ar<<m_IP<<m_nChannel<<xPos<<yPos;

    else{ 
    ar>>m_IP>>m_nChannel>>xPos>>yPos;

    }
      

  2.   

    对,一定要是CObject的子女才能串行化!
    1.还有其它的几个条件,要有默认的构造和析构函数!
    2.还要在程序的 .h 里面有
    DECLARE_DYNCREATE(CYouClass)
    .cpp里有:
    IMPLEMENT_DYNCREATE(CYouClass, CObject)
    3. 要把 Serialize(CArchive& ar) 定义成 virtual 了!
      

  3.   

    也不一定,比如CString 等等!!
      

  4.   

    可是他们有这个关系啊
       CObject
          |
          --CmdTarget
                 |
                 ——CWnd
      

  5.   

    我的读取代码:
     CObArray  m_SxjArray;
     CFile f;
     f.Open("SxjInfo.ini",CFile::modeRead);
     CArchive ar(&f,CArchive::load);
     m_SxjArray.Serialize(ar);
      

  6.   

    我的读取代码:
     CObArray  m_SxjArray;
     CFile f;
     f.Open("SxjInfo.ini",CFile::modeRead);
     CArchive ar(&f,CArchive::load);
     m_SxjArray.Serialize(ar);//就这错
      

  7.   

    不一定的!只要你自己组织好序列化就可以了,再用CArchive当然,比较麻烦,建议还是继承CObject
      

  8.   

    我的CSxj类必需是CWnd类,但CWnd类也是继承的CObject类啊?,为什么存的时候没问题,读取却出错呢?
      

  9.   

    我的读取代码:
     CObArray  m_SxjArray;
     CFile f;
     f.Open("SxjInfo.ini",CFile::modeRead);
     CArchive ar(&f,CArchive::load);
     m_SxjArray.Serialize(ar);//就这错出错时如果点《忽略》,就会说“没找到一未命名文件”,感觉好像是读取格式错误。
      

  10.   

    不用还是不等于你自已去实现了一个 CArchive !
    这是我从候捷老师的《深入浅出MFC 》2E 中学的!!