MFC/VC++ 怎样将C++对象存储到数据库并读取出来

本文介绍了如何在C++中使用MFC、Boost库和.NET框架进行对象的序列化,以便将C++对象存储到数据库并进行读取。MFC的序列化要求类从CObject派生并实现Serialize函数,而Boost库提供了一种跨平台的序列化解决方案,支持多种数据类型和类版本独立性。.NET框架的序列化机制则依赖于System.Runtime.Serialization命名空间,提供了二进制和XML两种序列化方式。在实际应用中,需根据项目需求和环境选择合适的方法。
摘要由CSDN通过智能技术生成

http://www.vckbase.com/index.php/wv/1190.html

http://blog.csdn.net/wirror800/article/details/4003995

4 使用C++将对象进行序列化的几种方法

使用C++进行对象序列化的方法可以有以下三种:基于Boost库的方法;基于.Net Framework的方法;以及基于MFC的方法。本章将就三种方法的实现机制、实现步骤,以及注意事项进行说明。

由于我们的开发环境在Windows下,部署环境在Unix下,因此我们的开发需要使用两个平台都可以兼容的技术。经过验证,基于.Net和基于MFC的方法仅适用于Windows的环境,而Boost库在Windows和Unix下都有相应的版本,因此在项目中应优先考虑使用Boost库进行对象的序列化。尽管如此,本文中仍然列出使用.Net和MFC进行序列化的方法,以供参考。三种方法相应的代码实现的例子将附在文章之后。

MFC中的序列化:

实现步骤

实现序列化的的类需要满足一系列条件:

1. 该类需要从CObject类派生(可以是间接派生);

2. 在类中中进行DECLARE_SERIAL宏定义;

3. 类存在有缺省的构造函数;

4. 类中实现了Serialize(CArchive&)函数,并且在其中调用基类的序列化函数;

5. 使用IMPLEMENT_SERIAL宏指明类名及版本号。

满足了这些条件之后,就可以进行序列化与反序列化了。

序列化时,首先,实例化一个CArchive类的对象,将其与输出文件相关联;其次,利用CArchive类的<<运算符重载将需要序列化的对象保存在文件中。

反序列化时,将CArchive类的对象与保存对象的文件相关联;然后新建一个需要反序列化的对象,利用CArchive类的>>运算符重载将文件里的内容恢复到需要反序列化的对象中。

 注意事项

使用这种方法需要注意的是:

l  需要包含afx.h头文件;

l  它不支持string类型的序列化,但是支持CString类型的序列化;

l  需要将项目属性中的MFC属性配置为“在共享DLL中使用MFC”或“在静态库中使用MFC”,否则编译时会报错。


举例:

一、新建一个继承于 CObject 的子类 CLine;

头文件:Line.h

01.classCLine : public CObject
02.{
03.private:
04.LOGPEN m_logPen;//画笔
05.COLORREFm_crBackColor;
06.CArray<CPoint, CPoint &> m_PointArray;//标记类对应框
07. 
08.public:
09.intGetSize();
10.CPoint GetPoint(intpos);
11.voidDrawLine(CDC *pDC,CPoint pt1,CPoint pt2,CRect rc);
12.voidDrawBackGround(CDC *pDC,CRect rect);
13.voidDrawPoint(CDC *pDC, CRect rect);
14.voidSetWidth(int iWidth);
15.COLORREFGetColor();
16.voidSetColor(COLORREF color);
17. 
18.COLORREFGetBkColor();
19.voidSetBkColor(COLORREF color);
20. 
21.voidAddPoint(CPoint point);
22.voidClear();
23.CLine();
24.virtual~CLine();
25.virtualvoid Serialize(CArchive &ar);
26.CLine& operator=(CLine &src);
27.DECLARE_SERIAL(CLine);
28.};

实现文件:Line.cpp

001.//
002.// Line.cpp: implementation of the CLine class.
003.//
004.//
005. 
006.#include "stdafx.h"
007.#include "TestAdo.h"
008.#include "Line.h"
009. 
010.#ifdef _DEBUG
011.#undef THIS_FILE
012.staticchar THIS_FILE[]=__FILE__;
013.#define new DEBUG_NEW
014.#endif
015. 
016.IMPLEMENT_SERIAL(CLine,CObject,1)
017. 
018.CLine::CLine()
019.{
020.Clear();
021.}
022.CLine::~CLine()
023.{
024. 
025.}
026.//重写 =
027.CLine& CLine::operator=(CLine &src)
028.{
029.if(this!=&src)
030.{
031.m_logPen = src.m_logPen;
032.m_crBackColor = src.m_crBackColor;
033.}
034.return*this;?
035.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值