MFC序列化追憶之旅.net -電腦資料

電腦資料 時間:2019-01-01 我要投稿
【m.clearvueentertainment.com - 電腦資料】

    工作以來一直在做.NET方面的程序,以前自學的C++和MFC許久未碰了,

MFC序列化追憶之旅.net

。今天恰逢周末休息,閑來翻看一本MFC的書,對序列化(Serialize)部分又研究了一番。在這次故地重游之旅中,我又再一次贊嘆于Microsoft Application Framework小組專家們的聰明才智,為 開發(fā)

   

   

   

    工作以來一直在做.NET方面的程序,以前自學的C++和MFC許久未碰了。今天恰逢周末休息,閑來翻看一本MFC的書,對序列化(Serialize)部分又研究了一番。在這次故地重游之旅中,我又再一次贊嘆于Microsoft Application Framework小組專家們的聰明才智,為開發(fā)人員創(chuàng)造出了一個如此優(yōu)秀的Framwork。

    人們都說,“發(fā)表是最好的回憶”,我也不妨在此回憶一番,記錄下這“MFC 序列化追憶之旅”。

    下面是我寫的一個MFC 序列化應(yīng)用例程。展現(xiàn)了如何將一組CBook類型的對象寫入文件以及如何再從文件中讀取,使“對象永續(xù)(object persistence)”。

    clearcase/" target="_blank" >cccccc width="90%" align=center bgColor=#e7e9e9 border=1>Book.h

    #include

    class CBook : public CObject

    {

    DECLARE_SERIAL(CBook)

    public:

    CString m_strName;

    CString m_strAuthor;

    CString m_strPress;

    public:

    CBook()

    {

    // 要使CBook對象實現(xiàn)序列化,必須定義默認構(gòu)造函數(shù)

    }

    CBook(CString strName, CString strAuthor, CString strPress)

    {

    m_strName = strName; // 書名

    m_strAuthor = strAuthor; // 作者

    m_strPress = strPress; // 出版社

    }

    void Serialize(CArchive &); // 重載基類的Serialize函數(shù)

    };

    Book.cpp

    #include "Book.h"

    IMPLEMENT_SERIAL(CBook, CObject, 1)

    void CBook::Serialize(CArchive &ar)

    {

    CObject::Serialize(ar);

    if(ar.IsStoring())

    {

    ar << m_strName << m_strAuthor << m_strPress;

    }

    else

    {

    ar >> m_strName >> m_strAuthor >> m_strPress;

    }

    }

    主程序

    CBook book1("Programming Windows", "Charles Petzold", "Microsoft Press");

    CBook book2("Programming Windows with MFC", "Jeff Prosise", "Microsoft Press");

    int nCount = 2;

    // 序列化

    CFile fileStore(_T("mybooks.dat"), CFile::modeWrite | CFile::modeCreate);

    CArchive arStore(&fileStore, CArchive::store);

    CBook* pBooksStore[2] = { &book1, &book2 };

    arStore << nCount;

    for (int i=0; i

    {

    arStore << pBooksStore[i];

    }

    fileStore.Close();

    // 反序列化

    CFile fileLoad(_T("mybooks.dat"), CFile::modeRead);

    CArchive arLoad(&fileLoad, CArchive::load);

    arLoad >> nCount;

    CBook* pBooksLoad = new CBook[nCount];

    for (int i=0; i

    {

    arLoad >> pBooksLoad[i];

    }

    fileLoad.Close();

    MFC序列化注意事項:

    ·要想使某一類型能被序列化,在它類型聲明文件(頭文件,Book.h)和類型定義文件(Book.cpp)中要分別使用DECLARE_SERIAL和IMPLEMENT_SERIAL宏,

電腦資料

MFC序列化追憶之旅.net》(http://m.clearvueentertainment.com)。

    ·能被序列化的只能指針型,不能是值型(pBooksStore數(shù)組中包含的就是兩個CBook類型的指針)。

    原文轉(zhuǎn)自:http://www.ltesting.net

最新文章