编写串行化类的问题

「已注销」 2015-05-12 05:02:35
我建立了一个工程叫demo04

首先我 新建一个类

第一步
class CSerialClass : public CObject
{
public:
CSerialClass();

DECLARE_SERIAL(CSerialClass) //添加序列化宏
public:
int m_Data;
CString m_Text;
public:
public:
virtual void Serialize(CArchive& ar);
public:
virtual ~CSerialClass();
};

第二步


CSerialClass::CSerialClass()
{

}

CSerialClass::~CSerialClass()
{

}


IMPLEMENT_SERIAL( CSerialClass, CObject, 1 ) //添加序列化宏

void CSerialClass::Serialize(CArchive& ar) //改写Serialize方法
{
if (ar.IsStoring())
{
ar<<m_Data<<m_Text;
}
else
{
ar>>m_Data>>m_Text;
}
}


第三步我加了两个按钮 设置了两个单机事件



#include "SerialClass.h"
void CSerializeDlg::OnOK() //保存对象
{
CSerialClass serial;
CFile file("SerialClass.dat",CFile::modeCreate|CFile::modeWrite);
CArchive ar(&file,CArchive::store);
serial.m_Data = 2015;
serial.m_Text = "我马上就毕业了";
serial.Serialize(ar);
}

void CSerializeDlg::OnButton1() //加载对象
{

CSerialClass serial;
CFile file("SerialClass.dat",CFile::modeRead);
CArchive ar(&file,CArchive::load);
serial.Serialize(ar);
MessageBox(serial.m_Text,"提示");
}

这个时候我发现运行是能运行 保存没什么问题,但是为什么一加载对象就会 出现问题
...全文
139 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
MJ_dangerous 2015-05-12
  • 打赏
  • 举报
回复
CString 的读写比较特殊; 例如CString str = "hello world"; 写的时候 int iSize = str.GetLenght(); ar<<iSize; if(iSize > 0) { ar.Write(str.GetBuffer(0),iSize); } 读的时候int iSize = 0; ar>>iSize; if(iSize > 0) { char * buf = new char[iSize +1]; ar.Read(buf, iSize); buf[iSize] = 0; CString = buf; delete []buf; }
MJ_dangerous 2015-05-12
  • 打赏
  • 举报
回复
CString 的读写比较特殊; 例如CString str = "hello world"; 读取的时候int iSize = 0; ar>>iSize; if(iSize > 0) { char * buf = new char[iSize +1]; ar.Read(buf, iSize); buf[iSize] = 0; CString = buf; delete []buf; }
MJ_dangerous 2015-05-12
  • 打赏
  • 举报
回复
不能直接>>CString,对于Csting的保存应该先int iSize = Cstring.GetLenght();arr<<iSize; arr.Write(CString.Lenght(),lenght);
Eleven 2015-05-12
  • 打赏
  • 举报
回复
把你路径换成绝对路径试一下~

2,586

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 资源
社区管理员
  • 资源
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧