<menu id="w8yyk"><menu id="w8yyk"></menu></menu>
  • <dd id="w8yyk"><nav id="w8yyk"></nav></dd>
    <menu id="w8yyk"></menu>
    <menu id="w8yyk"><code id="w8yyk"></code></menu>
    <menu id="w8yyk"></menu>
    <xmp id="w8yyk">
    <xmp id="w8yyk"><nav id="w8yyk"></nav>
  • 網站首頁 > 物聯資訊 > 技術分享

    MFC如何生成一個可串行化的類

    2016-09-28 00:00:00 廣州睿豐德信息科技有限公司 閱讀
    睿豐德科技 專注RFID識別技術和條碼識別技術與管理軟件的集成項目。質量追溯系統、MES系統、金蝶與條碼系統對接、用友與條碼系統對接

    一、MFC允許對象在程序運行的整個過程中持久化的串行化機制

    (1)串行化是指向持久化存儲媒介(如一個磁盤文件)讀或寫對象的過程。

    (2)串行化用于在程序運行過程時或之后修復結構化數據(如C++類或結構)的狀態。

    (3)MFC支持CObject類中的串行化,所以,所有繼承于CObject的類可以利用CObject的串行化協議。

    (4)串行化的基本思想:

              a、對象必須能將其當前狀態寫入到持久化存儲媒介中,通常用其成員變量實現。

              b、對象可以通過讀或反序列化從存儲媒介中重新構造對象的狀態。

              c、串行化處理所有對象指針的細節,以及序列化對象時對對象的循環引用。

              d、關鍵點是對象自己負責讀和寫其本身的狀態,所以,序列化一個對象時,必須是想基本的序列化操作。

    (5)MFC使用CArchive類的對象作為被序列化的對象和存儲媒介之間的中間媒介。

    二、生成一個可串行化的類的步驟

    (1) Derive your class from CObject. (定義一個基類為CObject的類)

    (2) Override the Serialize member function.(重寫串行化函數)

    (3) Use the DECLARE_SERIAL macro in the class declaration.(在類聲明文件中使用DECLARE_SERIAL宏)

    (4) Define a constructor with no arguments (a default constructor).(定義一個無參數的構造函數)

    (5) Use the IMPLEMENT_SERIAL macro in the class implementation file.(在實現文件中使用IMPLEMENT_SERIAL宏)

    三、實例

    Graph.h文件:

    [cpp] view plaincopy
    1. #pragma once   
    2.   
    3. // Graph 命令目標   
    4.   
    5. class Graph : public CObject  //(1)定義一個基類為COject的類   
    6. {  
    7.     DECLARE_SERIAL(Graph)  //(3)在類聲明文件中使用DECLARE_SERIAL宏   
    8. public:  
    9.     Graph(); //(4)定義一個無參數的構造函數   
    10.     Graph(int drawType, CPoint ptOld);  
    11.     virtual ~Graph();  
    12.   
    13.     void Serialize(CArchive &ar); //(2)重寫串行化函數   
    14.   
    15. private:  
    16.     int m_drawType;  
    17.     CPoint m_ptOld;  
    18. };  
    [cpp] view plaincopy
    1. #pragma once  
    2.   
    3. // Graph 命令目標  
    4.   
    5. class Graph : public CObject  //(1)定義一個基類為COject的類  
    6. {  
    7.     DECLARE_SERIAL(Graph)  //(3)在類聲明文件中使用DECLARE_SERIAL宏  
    8. public:  
    9.     Graph(); //(4)定義一個無參數的構造函數  
    10.     Graph(int drawType, CPoint ptOld);  
    11.     virtual ~Graph();  
    12.   
    13.     void Serialize(CArchive &ar); //(2)重寫串行化函數  
    14.   
    15. private:  
    16.     int m_drawType;  
    17.     CPoint m_ptOld;  
    18. };  

    Graph.cpp文件:

    [cpp] view plaincopyprint?
    1. // Graph.cpp : 實現文件   
    2. //   
    3.   
    4. #include "stdafx.h"   
    5. #include "Archive.h"   
    6. #include "Graph.h"   
    7.   
    8.   
    9. // Graph   
    10.   
    11. IMPLEMENT_SERIAL(Graph, CObject, 1) //(5)在實現文件中使用IMPLEMENT_SERIAL宏   
    12.   
    13. Graph::Graph() //(4)定義一個無參數的構造函數   
    14. {  
    15. }  
    16.   
    17. Graph::Graph(int drawType, CPoint ptOld)  
    18. {  
    19.     this->m_drawType = drawType;  
    20.     this->m_ptOld = ptOld;  
    21. }  
    22.   
    23. Graph::~Graph()  
    24. {  
    25. }  
    26.   
    27. // Graph 成員函數   
    28. void Graph::Serialize(CArchive &ar) //(2)重寫串行化函數   
    29. {  
    30.     if (ar.IsStoring())  
    31.     {  
    32.         ar<<m_drawType<<m_ptOld;  
    33.     }  
    34.     else  
    35.     {  
    36.         ar>>m_drawType>>m_ptOld;  
    37.     }  
    38. }  

    原博客:http://blog.csdn.net/candyliuxj/article/details/6782172

    RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成
    最近免费观看高清韩国日本大全