MFC技术内幕系列之(五)---MFC文档序列化内幕

来源:互联网 发布:网络有利有弊 英语翻译 编辑:程序博客网 时间:2024/06/05 10:17

引言:
     引入“文档序列化”的概念会让许多人感到迷惑,什么是“文档序列化”?其实说白了就是将数据(广义上的概念)从硬盘中读出或将数据写入硬盘中。其稍正规的定义可以看看MFC文档如下:
The CArchive class allows you to save a complex network of objects in a permanent binary form (usually disk storage) that persists after those objects are deleted. Later you can load the objects from persistent storage, reconstituting them in memory. This process of making data persistent is called "serialization."
     在MFC中,CArchive类和CRuntimeClass结构以及一些神秘地宏共同完成“文档序列化”这一工作,当然了我们也不能忘记CFile类以及它的那些派生类的功劳。

正文:
    “文档序列化”显然可以分成两个部分“写文件”和“读文件”。我在本文中也将从这两个方面来为你挖掘文档序列化的奥秘。
                       ///////////////////////////////////////////////
                       /*  1.“写读文件”的共同基础  */
                       ////////////////////////////////////////////// 
    无论是写还是读都等借助CRuntimeClass结构以及一些神秘的宏的帮助。在前几篇文章中我们没少和CRuntimeClass结构打交道,什么MFC执行期类型识别,什么动态创建技术等等。提到的这两种技术是文档序列化的基础,下面我们就看看为什么可以这么说:
    除了与动态创建有关的成员外,在CRuntimeClass结构中还与序列化有关的重要成员有:
    //in afx.h
    struct CRuntimeClass
   {
      // Attributes
        ...//
 LPCSTR m_lpszClassName;
 int m_nObjectSize;
 UINT m_wSchema; // schema number of the loaded class
        ...//
        void Store(CArchive& ar) const;
 static CRuntimeClass* PASCAL Load(CArchive& ar, UINT* pwSchemaNum);
        const AFX_CLASSINIT* m_pClassInit;
        ...//
   }
   其中两个重要函数Store和Load的源代码如下:这两个函数主要写和读a runtime class description,其中包括m_lpszClassName和m_wSchema(版本号);
我自已架设了博客,文章已转到个人博客,欢迎交流!

MFC技术内幕系列之(五)---MFC文档序列化内幕
http://www.jeanva.cn/post/49.html
 

原创粉丝点击