YOU CAN CODE!

 

With The Case Of UCanCode.net  Release The Power OF  Visual C++ !   Home Products | Purchase Support | Downloads  
Download Free Trial
Pricing & Purchase?
E-XD++Visual C++/ MFC Products
ActiveX COM Products
Technical Support

Links

Get Ready to Unleash the Power of UCanCode .NET


UCanCode Software focuses on general application software development. We provide complete solution for developers. No matter you want to develop a simple database workflow application, or an large flow/diagram based system, our product will provide a complete solution for you. Our product had been used by hundreds of top companies around the world!

"100% source code provided! Free you from not daring to use components because of unable to master the key technology of components!"


VC++ Article: DECLARE_SERIAL and IMPLEMENT_SERIAL and serialize data from or to disk

 
 

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.
    Collapse Copy Code
    //CInfo.h
    
    class CInfo : public CObject
    {
    DECLARE_SERIAL(CInfo)
    
    public:
    
        virtual void Serialize(CArchive& ar);
        int m_nIndex;
        CString m_strName;
    };
  • Add the serialization function in this class's .cpp file. Be sure to use the IMPLEMENT_SERIAL macro as shown.
    Collapse Copy Code
    //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;
        }
    }
  • As this example is concerned with just 2 variables, assume that 2 edit controls have been created to accommodate the Index and the Name. Add 2 variables to those edit controls using the Class Wizard. Now the File to which the data has to be written or read from has to be defined. I do that simply by :-
    Collapse Copy Code
    // The Accounts.dat file is the 
    // file that we are going to use 
    // to save and read data
    
    #define DATA_FILE _T("Accounts.dat") 
    
  • Now, we write the code for storing the data to the disk. Here, m_bCanSave is declared in the header file as BOOL m_bCanSave; and in the constructor it has been initialized as m_bCanSave = FALSE;
    Collapse Copy Code
    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
            }
        }   
    }
    
  • Now , we write the code for reading the data from the disk.
    Collapse Copy Code
    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);
    }

Conclusioning

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.

 

 

Ask any questions by MSN: ucancode@hotmail.com Yahoo: ucan_code@yahoo.com


 

Copyright ?1998-2011 UCanCode.Net Software , all rights reserved.
Other product and company names herein may be the trademarks of their respective owners.

Please direct your questions or comments to webmaster@ucancode.net