【发布时间】:2014-02-14 11:05:57
【问题描述】:
我正在尝试读取/打开已在 Visual Studio 2013 中创建的 C++ 程序中使用 VC++6 构建序列化的文件,某些属性/值未被读取或以某种方式丢失。
请帮助我了解这两个版本有什么不同以及如何解决它。
使用 CArchive 存储如下:
void CCubeShelf::Serialize(CArchive &ar,BOOL bChildren, int iVersion)
{
if(ar.IsStoring())
{
m_dwProperties |= CSHELF_MERCH | CSHELF_MERCH_DEPTH;
ar << m_dwProperties;
ar << m_iShelfNum;
ar << m_fDividerWidth;
ar << m_fDividerSpacing;
ar << m_fGrillHeight;
ar << m_crGrillColor;
ar << m_fMercHeight;
ar << m_fMerchDepth;
ar << m_csFrontPath;
ar << m_csLeftPath;
ar << m_csTopPath;
}
else
{
ar >> m_dwProperties;
ar >> m_iShelfNum;
ar >> m_fDividerWidth;
ar >> m_fDividerSpacing;
ar >> m_fGrillHeight;
ar >> m_crGrillColor;
if( m_dwProperties & CSHELF_MERCH ) ar >> m_fMercHeight;
if( m_dwProperties & CSHELF_MERCH_DEPTH )
{
ar >> m_fMerchDepth;
ar >> m_csFrontPath;
ar >> m_csLeftPath;
ar >> m_csTopPath;
}
}
CCube::Serialize(ar,bChildren,iVersion);
}
【问题讨论】:
-
这完全取决于如何数据被序列化。你必须告诉我们更多关于这方面的信息。
-
也许你在代码的其他地方序列化了 CTime 对象。在 VS6 中 CTime 只有 4 个字节,但从 VS2003 到 CTime 是 8 个字节长,所以如果你用 VS2013 反序列化一个之前用 VS6 序列化过的 CTime 对象,你会遇到麻烦。
-
不,很遗憾不是问题所在。我可以检查任何其他课程吗?
-
事实证明,序列化从来都不是问题,但实际上 = 运算符在升级到 Visual Studio 后不再重载,有什么想法吗?
-
你是指哪个
= operator?
标签: visual-c++ serialization mfc visual-c++-6