我看到网上有这么一段话:在创建CArchive类对象前,必须创建一个CFile对象,并将其与CArchive对象相关联。在文档/视图结构的实现中,这一步将由框架在调用Serialize()函数前自动完成。
在使用AppWizard创建的文档中,当单击打开或保存菜单项时,程序将自动创建一个指定文件的CFile对象,再创建一个指向该对象的CArchive对象,将二者都置为相同状态——打开或保存,然后再调用文档类Serialize()函数,将数据写入CArchive对象或从CArchive对象读取数据。当Serialize()函数完成工作后,框架将先后自动销毁CArchive对象和CFile对象。我不理解的是:
程序自动创建的CFile对象名称是什么?
在哪一步将二者置为相同的状态呢?还有,我新建了一个派生自CObject的CStroke类,我调用CStroke类的Serialize函数,参数CArchive& ar指向的是哪一个CFile啊?
非常感谢!

解决方案 »

  1.   

    CFile需要你自己创建一个,打开文件时需要指定打开标志,比如只读、读写等等,像下面这样:
    CFile file(_T("c:\\abc.dat"), CFile::modeRead);CArchive也是一样的,在构造函数中就要指定读写标志,比如:
    CArchive ar(&file, CArchive::load);CFile::modeRead跟CArchive::load对应,CFile::modeWrite跟CArchive::store对应
      

  2.   

    序列化是CObject类的一个特性,派生于CObject的类,加上对应宏即可实现序列化。
    这个和你要对这个类对象进行序列化是两回事,对这个类对象序列化时才要用到CArchive和CFile,这时序列化时框架自然会调用你实现的Serialize函数,对对象的数据进行保存。
    创建序列化累的时候不需要CFile。MSDN上对序列化类有详细说明。