我要对我的编写的类MyClass进行序列化操作,
在基于Dialog的界面中,我声明了CDocument的派生类进行Serialize操作,
能够写入数据,但是读取时报告格式错误;如果把类MyClass放到以向导方式生成的SDI框架的Application中,就可以进行正确的写入和读取。想知道问题出在什么地方?

解决方案 »

  1.   

    你完全可以自己写序列化程序,不必非得用MFC提供的。
      

  2.   

    支持自己写,应该和CDocument类成员差不多。
      

  3.   

    没必要用CDocument。我做序列化一般自己做。自己作个保存菜单之类的。每个文件中的序列化函数都不用改。唯一有麻烦的好像就是版本无法自动获得。我得方法是,自己序列化就去一个版本号就行啦。
      

  4.   

    比如,我以前做的,需要将某些内容导出到文件,我就用序列化方式。
    CFileDialog fileDlg(false,NULL,rouPath+fileName+".RUT",OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"*.RUT|*.RUT|*.TXT|*.TXT|",NULL);
    fileDlg.m_ofn.lpstrTitle = "航线导出";
    if(fileDlg.DoModal()==IDOK)
    {
    CString fileName = fileDlg.GetFileName();
    CFile file;
    if(file.Open(fileName,CFile::modeCreate|CFile::modeWrite))
    {
    CString ext = fileDlg.GetFileExt();
    if(ext == "RUT")
    {
    CArchive ar(&file,CArchive::store);
    m_pActRoute->Serialize(ar);//m_pActRoute类对象从CObject类派生,支持序列化。在类中已经定义了序列化函数
    ar.Close();
    }
    else if(ext == "TXT" || ext == "txt")
    {
    m_pActRoute->WriteToTextFile(&file);
    }
    file.Close();
    return;
    }
    }
    return;
    }
      

  5.   

    Serialize 需要转化成WORD格式
      

  6.   

    我的程序和上面提供的一样,
    只是我把它们封装进了DLL中。
    下午我尝试了把它们取出来,不进行封装,
    就能正常地存取,
    是否和封装有关系