Serialization in non - Document/View arch. projects .






4.78/5 (6 votes)
Jun 29, 2002
1 min read

63395
This explains how to serialize objects in non document/view architecture projects
Introduction
This article will show you how you can serialize data to disk and retrieve it again in non doc/view architecture projects. Just follow the steps outlined.
Steps to follow
- Create a normal project as you usually do.
- Add the class which you would use to serialize the data. It might contain
just normal variables or collection classes or any kind of data that you want
to store.
- Be sure to derive that class from
CObject
. Only then you can serialize the data. - Be sure to use the
DECLARE_SERIAL
macro inside.
- Be sure to derive that class from
//CInfo.h class CInfo : public CObject { DECLARE_SERIAL(CInfo) public: virtual void Serialize(CArchive& ar); int m_nIndex; CString m_strName; };
IMPLEMENT_SERIAL
macro as shown. //CInfo.cpp #include "stdafx.h" #include "CInfo.h" IMPLEMENT_SERIAL(CInfo,CObject,1) void CInfo::Serialize(CArchive& ar) { if (ar.IsLoading()) // If you are loading data from the disk { ar >> m_strName; ar >> m_nIndex; } else // If you are storing data to the disk { ar << m_strName; ar << m_nIndex; } }
// The Accounts.dat file is the // file that we are going to use // to save and read data #define DATA_FILE _T("Accounts.dat")
m_bCanSave
is declared in the header file as BOOL m_bCanSave;
and in the constructor it has been initialized as m_bCanSave = FALSE;
void SaveRecords() // Code to serialize and save the data { UINT nFlags = CFile::typeBinary | CFile::modeWrite; if (_access(DATA_FILE, 0)) { nFlags |= CFile::modeCreate; // The file doesn't exist, so create it m_bCanSave = TRUE; } else { int nTemp = _access(DATA_FILE, 6); // Check Read Write Permissions if(nTemp==0) m_bCanSave = TRUE; } if (m_bCanSave) { CFile file; CFileException fe; // The file exists with read & write permissions if (file.Open(DATA_FILE, nFlags, &fe)) { CArchive ar(&file, CArchive::store); UpdateData(TRUE); Info.m_nIndex = m_nIndex; Info.m_strName = m_strName; Info.Serialize(ar); // Serialize the data } } }
void LoadRecords() { if (_access(DATA_FILE, 6)==0) // If File Exists { CFile file; CFileException fe; if (file.Open(DATA_FILE,CFile::typeBinary | CFile::modeRead, &fe)) { CArchive ar(&file, CArchive::load); Info.Serialize(ar); } } m_nIndex = Info.m_nIndex; m_strName = Info.m_strName; UpdateData(FALSE); }
Conclusion
That's it. A Simple tutorial for serialization is complete. You have a program that can serialize data to the disk and retrieve it later. You didn't know that serialization was so easy. Did you? All Luck and have a nice time.