请问CArray如何序列化?

bluearth 2004-08-08 04:19:19
是这样定义的
CArray<CString,CString>*m_TextList;
序列化函数中代码为
if (ar.IsStoring())
{ // storing code
}
else
{ // loading code
}
m_LineList->Serialize(ar);

读取已保存文件时出错,信息为该内存不能为Read,调试时指向
m_LineList->Serialize(ar);
CArray类型的变量应该如何序列化那,请高手指点
...全文
356 点赞 收藏 10
写回复
10 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
DentistryDoctor 2004-08-09
同意jiangsheng,你应该用CStringArray,其它莫名其妙的错误可能与序列化无关。
回复
蒋晟 2004-08-09
如果连这种操作都失败,那么你需要检查你是否使用了野指针。
回复
liutian32 2004-08-09
CStringArray类本身就支持序列化,干嘛还要那么麻烦呢?
回复
liutian32 2004-08-09
m_LineList->Serialize(ar)会根据传入的ar来自行判断是store还是load
回复
liutian32 2004-08-09
if (ar.IsStoring())
{ // storing code


}
else
{ // loading code

}
m_LineList->Serialize(ar);//只加这一句就可以了

回复
Anikan 2004-08-09
if (ar.IsStoring())
{

m_pstrArray = new CStringArray;
m_pstrArray->SetSize(10);
ar << 10;
for(int i = 0; i < 10 ; i++)
{
CString str;
str.Format("%d",i);
m_pstrArray->SetAt(i,str);
}
m_pstrArray->Serialize(ar);
delete m_pstrArray;
}
else
{
m_pstrArray = new CStringArray;
int size;
ar >> size;
m_pstrArray->SetSize(size);
m_pstrArray->Serialize(ar);

for(int i = 0; i < size; i++)
{
CString str = m_pstrArray->GetAt(i);
TRACE("%s\n",str);
}
}
These codes will be ok.
回复
bluearth 2004-08-09
根据大家的建议,我做了些修改,首先用CStringArray定义list
如下: CStringArray *m_LineList;
并在构造函数中: m_LineList=new CStringArray;
序列化函数内容改为:
int size;
if (ar.IsStoring())
{ // storing code
size = m_LineList->GetSize();
ar<< size;
for(int i=0;i<size;i++)
{
m_LineList->Serialize(ar);
}
}
else
{ // loading code
ar>> size;
for(int i=0;i<size;i++)
{
m_LineList->Serialize(ar);
}
}
我做了调试,发现存入是没有问题的,这是不是就说明我得指针不是野指针?,
问题出在读(loading)已存储的文件时,其中size还是可以得到,但是到
m_LineList->Serialize(ar);这一句就出错了,出错信息为“0x0040dab3”指令引用的“0xcdcdcdcd”内存,改内存不能为“read”。到底是怎么回事啊?多谢了

回复
bluearth 2004-08-08
能给个例子麽,我想用GetSize得到大小却报错,麻烦稍详细些讲讲,多谢
回复
bluebohe 2004-08-08
先序列化数组的大小,然后序列化每一个元素,就可以了
回复
蒋晟 2004-08-08
CArray<CString,CString>
CArray不能支持包含构造函数进行或者指针数据成员的类
你可以使用CStringArray。
回复
相关推荐
发帖
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
帖子事件
创建了帖子
2004-08-08 04:19
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……