CArchive类!
void CPerson::Serialize(CArchive &ar)//自定义的串行化函数!
{
CObject::Serialize(ar);
if (ar.IsStoring())
{
ar < <m_sName < <m_iAge < <m_iMaritalStatus < <m_bEmployed;
}
else
{
ar> > m_sName> > m_iAge> > m_iMaritalStatus> > m_bEmployed;
}/**/
}
class CMFC_SerializeView : public CFormView
{
protected: // create from serialization only
......
private:
CPerson* m_pCurPerson;自定义的类指针!
void PopulateView();
};
class CMFC_SerializeDoc : public CDocument
{
.....
private:
CObArray m_oaPeople;//指向一个CPerson类!COArray可以存放任何从CObject派生出的对象!
int m_iCurPostition;
};
void CMFC_SerializeDoc::Serialize(CArchive& ar)
{
m_oaPeople.Serialize(ar);
}
请问最后一段代码中的“m_oaPeople.Serialize(ar);”为什么就可以实现全部的数据读取?
谢谢!
[解决办法]
仅仅凭这几行代码,应该不行
[解决办法]
根本原因在于CObjArray和CObject的Seriarize方法,你可以在Serialize上按F12进去看它的源代码。
[解决办法]
CObjArray的Serialize调用时调用其每个元素的Serialize函数
/////////////////////////////////////////////////////////////////////////////
// Serialization
void CObArray::Serialize(CArchive& ar)
{
ASSERT_VALID(this);
CObject::Serialize(ar);
if (ar.IsStoring())
{
ar.WriteCount(m_nSize);
for (INT_PTR i = 0; i < m_nSize; i++)
ar < < m_pData[i];
}
else
{
DWORD_PTR nOldSize = ar.ReadCount();
SetSize(nOldSize);
for (INT_PTR i = 0; i < m_nSize; i++)
ar > > m_pData[i];
}
}
[解决办法]
ar > > 和 ar < < 由 ar.IsStoring()决定, 而ar.IsSroring又由 创建时设置的mode也就是CArchive::store或CArchive::load决定。