我遇到了在VS2010 VC ++中序列化和反序列化指针数据的问题。基本上,程序无法序列化和反序列化CObList *指针数据。源代码执行正常的步骤来处理该过程:
1)MyObject继承自CObject;
2)我们在类声明中添加了DECLARE_SERIAL(MyObject)(第1行);
3)我们添加了IMPLEMENT_SERIAL(MyObject,MyParentObject,SCHEMA_VERSION)
//Where MyParentObject is inherited from CObject (indirectly, there're a few more levels of objects), SCHEMA_VERSION is just a version control CONSTANT we use
4)然后我们重载了
void MyObject::Serialize( CArchive& ar )
{
BOOL b;
.....
... (some other simple variables with default values)
MyParentObject::Serialize(ar);
if (ar.IsStoring())
{
ar << m_sTitle;
ar << m_pObjectsList;
}
else
{
ar >> m_sTitle;
ar >> m_pObjectsList;
}
}
注意:相应地实现MyParentObject :: Serialize。 CObList * m_pObjectsList;在头文件中正确声明。
当尝试从“ar&gt;&gt;&n; m_pObjectsList”反序列化时,程序在MyApp.exe中引发了访问冲突(第一次机会异常,位于0x52e77b2c(mfc100d.dll):0xC0000005:访问冲突读取位置0x00000004)。 / p>
然后我开始测试并将复杂指针m_pObjectsList更改为一个指向CString的简单指针。将指针反序列化为CString时,同时发生同样的错误。如果我只是通过CString序列化和反序列化(没有指针),它工作正常。似乎某些指针序列化已被破坏。
也许MFC100d在64位操作系统调试器中与W32程序不兼容?这在调试模式和释放模式下都会导致问题。发生了什么?我已经耗尽了我的资源,任何方向或灵感都非常感激。谢谢大家。
答案 0 :(得分:4)
指针不能序列化。
无法保证
一个想法是使用文件偏移来模拟指针。因此,对象位于文件中相对于开头的位置。这是困难的。
更好的想法是写出所有数据,让应用程序读取数据将数据放入内存。这也使应用程序可以自由地使用它想要的任何数据结构来存储数据。