다음을 통해 공유


CArchive::MapObject

개체를 배치할 파일을 실제로 serialize 되지 않습니다 있지만 하위에 대 한 참조를 사용할 수 있는 지도에서이 멤버 함수를 호출 합니다.

void MapObject(
   const CObject* pOb 
);

매개 변수

  • pOb
    상수에 저장 되는 개체 포인터입니다.

설명

예를 들어, 문서를 serialize 할 수 있지만 문서에 포함 된 항목을 serialize 합니다.호출 하 여 MapObject, 이러한 항목 또는 하위 문서를 참조 하려면 다음을 허용 합니다.Serialize 된 하위 항목을 serialize 할 수 있습니다 또한 자신의 m_pDocument 후방 포인터.

호출할 수 MapObject 에 저장 하 고 로드는 CArchive 개체.MapObject유지 되는 내부 데이터 구조에 지정 된 개체를 추가 CArchive 개체를 직렬화 및 역직렬화를 달리 하지만 ReadObjectWriteObject, 호출 하지 않습니다 개체를 serialize 합니다.

예제

//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;
   }
}

요구 사항

헤더: afx.h

참고 항목

참조

CArchive 클래스

계층 구조 차트

CArchive::ReadObject

CArchive::WriteObject