CArchive::MapObject
Rufen Sie die Memberfunktion auf, um die Objekte in der Zuordnung zu platzieren, die eigentlich nicht zur Datei serialisiert werden, aber die verfügbar sind, damit Unterobjekte verweisen.
void MapObject(
const CObject* pOb
);
Parameter
- pOb
Ein konstanter Zeiger auf das Objekt, das gespeichert wird.
Hinweise
Beispielsweise serialisierten Sie kein Dokument, müssten Sie jedoch die Elemente serialisieren, die Teil des Dokuments sind.Mit MapObject aufrufen, können Sie diese Elemente oder Unterobjekten auf, um das Dokument zu verweisen.Außerdem serialisierte Unterelemente können ihren m_pDocument Rückseitenzeiger serialisieren.
Sie können MapObject aufrufen, wenn Sie zu speichern und vom CArchive-Objekt laden.MapObject fügt das angegebene Objekt zu internen Datenstrukturen hinzu, die durch das Objekt CArchive während der Serialisierung und Deserialisierung der verwaltet werden, jedoch anders ReadObject und WriteObject, ruft es nicht serialisiert auf dem Objekt auf.
Beispiel
//MyDocument.h
class CMyDocument : public CDocument
{
public:
DECLARE_SERIAL(CMyDocument)
CObList m_listOfSubItems;
virtual void Serialize(CArchive& ar);
};
//MyDocument.cpp
IMPLEMENT_SERIAL(CMyDocument, CDocument, 1)
void CMyDocument::Serialize(CArchive& ar)
{
CDocument::Serialize(ar);
if (ar.IsStoring())
{
// TODO: add storing code here
}
else
{
// TODO: add loading code here
}
ar.MapObject(this);
//serialize the subitems in the document;
//they will be able to serialize their m_pDoc
//back pointer
m_listOfSubItems.Serialize(ar);
}
//SubItem.h
class CSubItem : public CObject
{
DECLARE_SERIAL(CSubItem)
CSubItem() : m_i(0) {};
public:
CSubItem(CMyDocument * pDoc)
{ m_pDoc = pDoc; }
// back pointer to owning document
CMyDocument* m_pDoc;
WORD m_i; // other item data
virtual void Serialize(CArchive& ar);
};
//SubItem.cpp
IMPLEMENT_SERIAL(CSubItem, CObject, 1);
void CSubItem::Serialize(CArchive& ar)
{
if (ar.IsStoring())
{
// will serialize a reference
// to the "mapped" document pointer
ar << (CObject *)m_pDoc;
ar << m_i;
}
else
{
// Will load a reference to
// the "mapped" document pointer
ar >> (CObject *&) m_pDoc;
ar >> m_i;
}
}
Anforderungen
Header: afx.h