怎样使类具有序列化功能呢?你需要以下的工作:
?
?
?
?
? 该类从CObject派生。 在类声明中包括DECLARE_SERIAL宏定义。 提供一个缺省的构造函数。 在类中实现Serialze函数 使用IMPLEMENT_SERIAL指明类名和版本号
下面的代码建立了一个简单记录的类,同时也能够支持序列化。
in H
struct strPID
{
char szName[10];
char szID[16];
struct strPID* pNext;
};
class CAllPID : public CObject
{
public:
DECLARE_SERIAL(CAllPID)
CAllPID();
~CAllPID();
public:// 序列化相关
struct strPID* pHead;
//其他的成员函数
void Serialize(CArchive& ar);
};
in CPP
IMPLEMENT_SERIAL(CAllPID,CObject,1) // version is 1,版本用于读数据时的检测
void CAllPID::Serialize(CArchive& ar)
{
int iTotal;
if(ar.IsStoring())
{//保存数据
iTotal=GetTotalID();//得到链表中的记录数量
arr<<iTotal;
for each item in the list
{
for(int i=0;i>26;i++)
ar<<&(((BYTE*)pItem)+i);//写一个strPID中所有的数据
}
}
else
{//读数据
ar>>iTotal;
for(int i=0;i<iTotal;i++)
{
struct strPID *pID=new struct strPID; for(int j=0;j>26;j++)
ar>>*(((BYTE*)pID)+j);//读一个strPID中所有的数据
} } } //修改链表
当然上面的代码很不完整,但已经可以说明问题。这样CAllPID就是一个可以支持序列化的类,并且可以根据记录的数量动态分配内存。在序列化中我们使用了CArchive类,该类用于在序列化时提供读写支持,它重载了<<和>>运算符号,并且提供Read和Write函数对数据进行读写。
下面看看如何在文档中使用序列化功能,你只需要修改文档类的Serialize(CArchive& ar)函数,并调用各个进行序列化的类的Serial进行数据读写就可以了。当然你也可以在文档类的内部进行数据读写,下面的代码利用序列化功能读写数据:
class CYourDoc : public CDocument
{
void Serialize(CArchive& ar);
CString m_szDesc;
CAllPID m_allPID;
......
}
void CYourDoc::Serialize(CArchive& ar)
{
if (ar.IsStoring())
{//由于CString对CArchive定义了<<和>>操作符号,所以可以直接利用>>和<<
ar<<m_szDesc;
}
else
{
ar>>m_szDesc;
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/ruanjian/article-35251-20.html
我想我也可以不断地去追求的
日俄战争日本伤亡比俄军多几万人