Freigeben über


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

Siehe auch

Referenz

CArchive-Klasse

Hierarchien-Diagramm

CArchive::ReadObject

CArchive::WriteObject