各种数据类型的序列化

void MyClass::Serialize( CArchive& ar )
{
MyBasicClass::Serialize(ar);//基类

if(ar.IsLoading())//读取
{

ar >> m_nPayNo;//整形,double形, long

ar.Read(&m_bValue,sizeof(m_bValue));//bool形

ar >> m_sValue;//CString

ar >> m_TimeCreate.wYear; //SYSTEMTIME
ar >> m_TimeCreate.wMonth;
ar >> m_TimeCreate.wDay;
ar >> m_TimeEnd.wYear;
ar >> m_TimeEnd.wMonth;

ar >> m_TimeEnd.wDay;

//BYTE 指针

ar >> m_nLength;

if(m_nLength>0)

{

m_pData= new BYTE[m_nLength];

ar.Read(m_pData,m_nLength);

}

//CObArray 数组

int nTemp=0;//先得到长度

ar >> nTemp;

for(int i=0;i<nTemp;i++)

{

CMyClass* pData = new CMyClass;//数组里面的内容(自定义类)

pData->Serialize(ar);

m_arSign.Add(pData);

}

m_lstSmartVar.Serialize(ar); //CObList链表

m_MyClass.Serialize(ar);//自定义类

//CBitmap m_Bmp;         CBitmap 类

bool bHave;

ar.Read(&bHave,sizeof(bHave));

if(bHave)

{

CPaperDib* pDib = new CPaperDib;

pDib->Serialize(ar);

HBITMAP hBitmap = CPaperDib::DIBToBitmap(pDib);

if(m_Bmp.m_hObject)

m_Bmp.DeleteObject();

m_Bmp.Attach(hBitmap);

delete pDib;

}

//CRect 类

ar >> m_Rect.top;

ar >> m_Rect.bottom;

ar >> m_Rect.left;

ar >> m_Rect.right;

}

else //写

{

ar << m_nPayNo; //整形,double形, long

ar.Write(&m_bValidate,sizeof(m_bValidate));//bool形

ar << m_sValue;//CString

ar << m_TimeCreate.wYear; //SYSTEMTIME

ar << m_TimeCreate.wMonth;

ar << m_TimeCreate.wDay;

ar << m_TimeEnd.wYear;

ar << m_TimeEnd.wMonth;

ar << m_TimeEnd.wDay;

//BYTE 指针

ar << m_nLength;

if(m_nLength>0)

{

        ar.Write(m_pData,m_nLength);

}

//CObArray 数组

int nTemp=m_arSign.GetSize();

ar << nTemp;

for(int i=0;i<nTemp;i++)

{

CMyClass* pData = (CMyClass*)m_arSign.GetAt(i);

pData->Serialize(ar);

}

m_lstSmartVar.Serialize(ar); //CObList链表

m_MyClass.Serialize(ar);//自定义类

//CBitmap m_Bmp;         CBitmap 类

bool bHave = true;

CPaperDib* pDib = CPaperDib::BitmapToDIB((HBITMAP)this->m_Bmp.GetSafeHandle());

if(!pDib)

bHave = false;

ar.Write(&bHave,sizeof(bHave));

if(pDib)

{

pDib->Serialize(ar);

delete pDib;

}

//CRect 类

ar << m_Rect.top;

ar << m_Rect.bottom;

ar<<m_Rect.left;

ar << m_Rect.right;

}

}

CFile file(sFilePath,CFile::modeRead); //读取 sFilePath是要读取的文件名

 if (file != NULL)

{

CArchive ar(&file, CArchive::load);

TRY

 {

MyClass.Serialize(ar);//MyClass 类的对象

}

CATCH_ALL(e)

{}

ar.Close();

}


//保存 sFilePath是要保存的文件名

CFile file;

CFileException e;

if( !file.Open(sFilePath,CFile::modeCreate|CFile::modeWrite,&e) )

       return;


CArchive ar(&file, CArchive::store);

TRY

{

        MyClass.Serialize(ar);//MyClass 类的对象

}

CATCH_ALL(e)

{}

END_CATCH_ALL

ar.Close();


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值