CArchive沒有基類。
CArchive允許以一個永久二進制(通常為磁盤存儲)的形式保存一個對象的復雜網絡,它可以在對象被刪除時,還能永久保存。可以從永久存儲中裝載對象,在內存中重新構造它們。使得數據永久保留的過程就叫作“串行化”。
可以把一個歸檔對象看作一種二進制流。象輸入/輸出流一樣,歸檔與文件有關并允許寫緩沖區以及從硬盤讀出或讀入數據。輸入/輸出流處理一系列ASCII字符,但是歸檔文件以一種有效率、精練的格式處理二進制對象。
必須在創建一個CArchive對象之前,創建一個CFile對象。另外,必須確信歸檔文件的裝入/存儲與文件的打開模式是兼容的。每一個文件只限于一個活動歸檔文件。
當構造一個CArchive對象時,要把它附加給表示一個打開文件的類CFile(或派生類)的對象上。還要指定歸檔文件將用于裝載還是存儲。CArchive對象不僅可以處理首要類型,而且還能處理為串行化而設計的CObject_派生類的對象。一個串行化類通常有一個Serialize成員函數并且使用DECLARE_SERIAL和IMPLEMENT_SERIAL宏。這些在CObject類中有所描述。
重載提取(>>)和插入(<<)是方便的歸檔編程接口。它支持主要類型和CObject派生類。
CArchive還支持使用MFC Windows套接字類CSocket和CSocketFile編程。IsBufferEmpty成員函數也支持這種使用。如果要了解有關CArchive的更多信息,請參閱聯機文檔“Visual C++ 程序員指南”中的“串行化(永久對象)” 和“Windows套接字:在歸檔文件中使用套接字”
include<afx.h>
請參閱 CFile,CObject,CSocket,CSocketFile
CArchive類的成員
數據成員
m_pDocument 指向被串行化的CDocument對象
構造函數
Carchive 創建一個Carhcive對象
Abort在不異常的情況下,關閉歸檔文件
Close沖掉未寫入數據并且釋放與CFile的連接
基礎輸入/輸出
Flush從歸檔文件緩沖區中沖掉未寫入數據
運算符>>裝載對象和歸檔文件的主要類型
運算符<<存儲對象和歸檔文件的主要類型
Read讀入原始類型
Write寫入原始類型
WriteString寫一行文本
ReadString讀一行文本
狀態
GetFile獲得此歸檔文件的
CFile對象指針
GetObjectSchema由Serialize函數調用來確定被非串行化的對象的版本SetObjectSchema在歸檔文件中存儲對象概要
IsLoading確定歸檔文件是否被裝載
IsStoring確定歸檔文件是否被存儲
IsBufferEmpty確定在一個Windows Socket接收過程中緩沖區是否被清空
對象輸入/輸出
ReadObject調用一個用于裝載的Serialize函數
WriteObect調用一個用于裝載的Serialize函數
MapObject在沒有對文件串行化的映射中放置對象,但是此映射對參考的子對象有效
SetStoreParams設置哈希表的大小和映射的塊的大小,在串行化的過程中識別唯一的對象
LoadParams設置裝載數組擴展的大小。必須在被裝載對象之前或調用MapObject或ReadObject之前
ReadClass讀入一個原先存儲在WriteClass中的類的參考
WriteClass把對CRuntime的參考寫入Carchive
SerializeClass根據CArchive方向,讀入或寫入對CArchive對象的類的參考
成員函數
CArchive::Abort
void Abort( );
說明
調用此函數在不異常的情況下關閉歸檔文件。CArchive析構程序將調用Close,它將沖掉任何沒有被存儲在相關CFile對象中的數據。這會引起異常。
當獲取這些異常時,有一個好的方法就是使用Abort,這樣析構CArchive
對象就不會再引起異常。當處理異常時,在失敗時CArchive::Abort將不會異常,因為與CArchive::Clsoe不同,Abort忽略失敗。
如果使用new在堆上分配CArchive對象,則在關閉文件之后,必須刪除它。
請參閱
CArchive::Close,
Cfile::Close
CArchive::CArchive
CArchive(CFile*pFile,UINTnMode,int nBufSize=4096,void*lpBuf=NULL );
throw(CmemoryException,CArchiveException,CFileException);
參數
pFileCFile
對象的指針。CFile對象是永久數據的最終的源或目標。
nMode標識。它指定了對象是否從歸檔文件中裝載或存儲到文件中去。
nMode參數必須有下列值之一:l CArchive::load 從歸檔文件裝載數據。CFile只讀。l CArchive::store 把數據保存到歸檔文件中。允許CFile寫操作。l CArchive::bNoFlushOnDelete 當歸檔文件析構程序被調用時,防止歸檔文件自動調用Flush。如果設定了此標識,則在析構程序被調用之前必須負責調用Close。如果不這樣做,數據就會崩潰。
nBufSize
指定內部文件緩沖區大小的整數,以字節計算。注意缺省的緩沖區
大小為4096字節。如果例程歸檔大的對象,使用大一些的緩沖區,即多個文件緩沖區,那么將會提高例程的執行效率。
lpBuf
指向nBufSize大小的提供緩沖區的指針。如果不指定這個參數,歸檔文 件從本地堆為歸檔文件分配一個緩沖區并且當對象被毀棄時,釋放緩沖 區。歸檔文件不能釋放一個提供的緩沖區。
說明
構造CArchive對象并且指定它將用于裝載或存儲對象。在創建歸檔文件之后,不能改變這個指定內容。不能使用CFile操作來改變文件的狀態直到已經關閉歸檔文件時。任何這樣的操作都將會毀棄歸檔文件的完整性。通過由GetFile成員函數獲得歸檔文件的文件對象使得可在串行化過程中的任何時候訪問文件指針的位置。然后使用Cfile::GetPosition函數。應該在獲得文件指針位置之前,調用CArchive::Flush。
示例
extern char* pFileName
CFile f;
char buf[512];
if(!f.Open( pFileName,Cfile::modeCreate| Cfile::modeWrite)){
#ifdef_DEBUG
afxDump<< “unable to open file”<<”\n”;
exit(1);
#endif
}
CArchive ar( &f, Cachive::strore,512,buf);
請參閱 CArchive::Close,
CArchive::Flush,
Cfile::Close
CArchive::Close
void Close( )
throw( CArchiveException,CFileException);
說明
沖掉保存在緩沖區中的任何數據,關閉歸檔文件并且釋放歸檔文件與文件的鏈接。對于歸檔文件沒有允許的其它操作。在關閉一個歸檔文件之后,可以為一個同樣文件創建另一個歸檔文件或者關閉文件。成員函數Close保證所有數據從歸檔文件傳輸到文件并且使歸檔文件無效。為了完成從文件到存儲介質的傳輸,必須首先使用Cfile::Close并且再毀棄CFile對象。
請參閱 CArchive::Flush,
CArchive::Abort
CArchive::Flush
void Flush( );
throw( CFileException);
說明
迫使保留在歸檔文件中的數據寫入文件。成員函數Flush保證所有的數據從歸檔文件傳輸到文件。必須調用Cfile::Close來完成從文件到存儲介質的傳輸。
請參閱 CArchive::Close,
Cfile::Flush,Cfile::Close
CArchive::GetFile
CFile*GetFile( ) const
返回值
指向正在使用的CFile對象的指針。
說明
為此歸檔文件獲得CFile對象指針。必須在使用GetFile之前沖掉歸檔文件。
示例
extern CArchive ar;
const CFile*fp=ar.GetFile( );
請參閱
CArchive::Flush
CArchive::GetObjectSchemaUINT
GetObjectSchema( )
返回值
返回在非串行化過程中,被讀入對象的版本。
說明
由Serialize函數調用此函數,確定當前被非串行化的對象的版本。當CArchive對象正在被裝載時,調用此函數才是有效的(CArchive::IsLoading則返回非零值)。它必須是Serialize函數的第一次調用而且只能調用一次。返回值-1(UINT)說明版本數未知。CObject派生類可以使用與大綱版本自己(在IMPLEMENT_SERIALH宏里)結合起來使用的VERSIONABLE_SEHEMA,創建一個“版本化對象”,即一個對象它的成員函數可以讀入多個版本。當版本不匹配時,缺省的框架功能(不帶有VERSIONABLE_SHEMA)將異常信號。
示例
IMPLEMENT_SERIAL(CMyObject,CObject,VERSIOANABLE_SCHEMA|1)
void CMyObject::Serialize(CArchive& ar)
{
if (ar.Isloading( ))
{
int nVersion=ar.GetObjectSchma( );
switch(nVersion)
{
case 0:
//read in previous version of /
/this object
break;
case 1:
//read in current version of
//this object
break;
default:
//report unknown version of
//this object
break;
}
}
else
{
//Normal soring code goes here
}
}
請參閱 CObject::Serialize,
CObject::IsSerializable,
IMPLEMNET_SERIAL,DECLARE_SERIAL,
CArchive::IsLoading
CArchive::IsBufferEmpty
BOOL IsBufferEmpty( ) const
返回值
如果歸檔文件的緩沖為空,則返回非零值,否則為0。
說明
調用此函數,確定歸檔文件的緩沖區是否為空。此函數支持使用Windows套接字類CSocketFile編程。對與CFile對象有關的歸檔文件則不需要使用它。
與CSocketFile對象相關的歸檔文件使用IsBufferEmpty的原因是歸檔文件的緩沖區可能包含多個消息或記錄。在接收一個消息時,應該使用IsBufferEmpty控制這樣一個循環,它不斷地接收數據,直到緩沖區為空。如果要了解更多的內容,請參閱類CAsyncSocket的Rceive成員函數以及MFC高級概念樣例CHATSRVR,它將告訴你如何使用IsBufferEmpty。
如果要了解更多的內容,請參閱聯機文檔“Visual C++程序員指南”中的“Windows套接字:在歸檔文件中使用套接字”。
請參閱 CSocketFile,
CAsyncSocket::Receive
CArchive::IsLoading
BOOL IsLoading( ) const
返回值
如果正在裝載歸檔文件,則返回非零值,否則為0。
說明
確定歸檔文件是否正在裝載數據。此成員函數由歸檔文件類的Serialize函數調用。
示例
int i;
extern CArchive ar;
if (ar.Isloading( ))
ar>>i;else
ar << i;
請參閱 CArchive::IsStoring
CArchive::IsStoring
BOOL IsStorng( ) const;
返回值
如果正在存儲歸檔文件,則返回非零值,否則為0。
說明
確定是否正在存儲歸檔文件。這個函數由歸檔文件類的Serialize函數調用。如果歸檔文件的IsStoring狀態為非零,則它的IsLoading狀態為0,反
之亦然。
示例
int i;
extern CArchive ar;
if( ar.IsStoring( ))
ar<<i;else ar>>i;
請參閱 CArchive::IsLoading
CArchive::MapObject
void MapObject(const CObject*pOb);
參數
pOb指向正在存儲的對象的指針。
說明
調用此成員函數在映射中放置對象。此映射沒有真的對文件串行化,但是對參考的子對象有效。舉例來說,可能不想串行化一個文檔,但是想對作為文檔一部分的項串行化。通過調用MapObject,可允許那些項或子對象參考文檔。而且,串行化子項還可以串行化它們的m_pDocument向后的指針。
當要把數據存儲到CArchive對象和從它裝載數據時,可以調用MapObject。在串行化和非串行化的過程中,MapObject向由CArchive保持的內部數據結構添加特定的對象,但是它不象ReadObject和WriteObject那樣,它不會對對象串行化。
示例
//MyDoc.h
//Document should have DECLEAR_SERIAL and IMPLEMENT_SERIAL
class CMyDocument: public CDocument
{
CObList m_listOfSubItems;
……
DECLARE_SERIAL(CMyDocument)
};
//MyDoc.cpp
…….
MPLEMENT_SERIAL(CMyDocument.CObject,1)
…….
void CMyDocument::Serialize(CArchive& ar)
{
if (ar.IsStoring( ))
{
//TODO:add storing code here
}
else
{
//TODO:add loading code here
}
ar.MapObject(this);
//serialize the subitems in the documents;
//they will be able to serialize their m_pDoc
//back
pointer m_listOfSubItems.Serialize(ar);
}
//SubItem.hclass
CSubItem:public CObject
{
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
void CSubItem:Serialize(CArchive& ar)
{
if (ar.IsStoring( ))
{ //will serializing a reference
//to the “mapped”document pointer
ar <<m_pDoc;
ar<<m_i;
}
else
{
//will load a reference to
//the the “mapped”document pointer
ar >>m_pDoc;
ar >>m_i;
}
}
請參閱 CArchive::ReadObject,CArchive::WriteObject
CArchive::Read
UINT Read(void*lpBuf,UINT nMax);
throw(CFileException);
返回值
包含實際讀入字節數的無符號整數。如果返回值小于所需要的數值,則說明已達到了文件的末尾。達到文件末尾時,沒有異常。
參數
lpBuf指向提供的緩沖區的指針。這個提供的緩沖區接收從歸檔文件讀取的數據。
nMax標明從歸檔文件讀取的字節數的無符號指針。
說明
從歸檔文件讀取指定的字節數。歸檔文件不解釋字節數。可以在Serialize函數里使用Read成員函數,讀取包含在對象中的普通結構。
示例
extern CArchive ar;
char pb[100];
UINT nr=ar.Read(pb.100);
CArchive::ReadClass
CRuntimeClass*ReadClass(const
RuntimeClass*pClassRefRequested=NULL,
UINT* pSchema=NULL,DWORD* obTag=NULL);
throw CArchiveException;
throw CNotSupportedException;
返回值
指向CRuntimeClass結構的指針。
參數
pClassRefRequested
指向CRuntimeClass結構的指針,此結構對應于所需要的類的參考。可以為NULL。
pSchema
指向原先存儲的運行時類的大綱的指針。
obTag
代表對象的唯一標識的數值。通過ReadObject的實現,在內部使用。只用于高級編程。obTag通常應為NULL。
說明
調用此成員函數來讀取一個原先存儲在WriteClass中的類的參考。
如果pClassRefReguested不為NULL,ReadClass證明了歸檔文件類信息與例程類是兼容的。如果不兼容,ReadClass將產生一個CArchiveException。例程必須使用DECLARE_SERIAL和IMPLEMENT_SERIAL,否則,ReadClass將產生一個CNotSupportedException。如果pSchema為NULL,則存儲類的大綱可通過調用CArchive::GetObjectSchema來恢復,否則,*pSchema將會包含原先存儲的運行時類的大綱。可以使用SerializeClass來代替ReadClass,它可以處理類參考的讀和寫。
請參閱 CArchive::WriteClass,
CArchive::GetObjectSchema,
CArchive::SetObjectSchema,
CArchiveExcepti_on,
CNotSupportedException,
CArchive::SerializeClass
CArchive::ReadObject
CObject*ReadObject(const CRuntimeClass *pClass); throw(CFileException,CArchiveException,CMemoryException);
返回值
CObject指針。它必須通過使用CObject::IsKindOf安全地指向當前的派生類。
參數
pClass
指向CRumtimeClass結構的常量指針。此結構對應于期待讀入的對象。
說明
從歸檔文件中讀入對象并構造一個合適類型的對象。此函數通常由CArchive提取(>>)運算符重載一個CObject指針調用它。ReadObject,反過來,調用歸檔文件類的Serlialize函數。如果提供一個非零的pClass參數,它可以從RUNTIME_CLASS獲得,則函數確認歸檔文件的運行類。假設在類的實現中已經使用IMPLEMENT_SERIAL宏。
請參閱 CArchive::WriteObject,
CObject::IsKindOf
CArchive::ReadStringBool
ReadString(CString&rString);
LPTSTR ReadString(LPTSTR lpsz,UINT nMax);
throw(CArchiveException);
返回值
在返回邏輯值的版本中,True代表成功;False相反。在返回LPTSTR的版本中,LPTSTR是一個指向包含文字數據的緩沖區的指針,NULL代表到達文件尾。
參數
rString
CString的一個參考。CString將包含從與CArchive對象有關的文件中讀出的結果字符串。
Lpsz
指定一個指向提供的緩沖區的指針。此緩沖區將接收一個以空終止符結尾的文字串。
nMax
指定讀入字符的最大數。它不允許小于lpsz緩沖區的大小。
說明
調用此函數從與CArchive對象有關的文件中讀取數據,放入緩沖區。在帶有nMax參數的成員函數的版本中,緩沖區最多有nMax-1字符。讀入的操作由一個回車換行符終止。在新行符號后面的字符都被丟棄了。在每種情況下,都有一個空字符(“/0”)。CArchive::Read還對文本-模式輸入有效,但是它不以回車換行符終止。
請參閱 CArchive::Read,
CArchive::WriteString,
CArchiveException
CArchive::SerializeClass
void SerializeClass(const CRuntimeClass*pRuntimeClass);
參數
pRuntimeClass
指向基類的運行類對象的指針。
說明
當想存儲和裝載一個基類的版本信息時,調用此成員函數。SerializeClass讀或對CArchive對象寫一個類的參考,取決于CArchive的方向。使用SerializeClass來代替ReadClass和WriteClass,可以使得更方便地串行化基類對象。因為SerializeClass需要較少的代碼和參數。像ReadClass一樣,SerializeClass證明了歸檔文件信息與的例程類兼容。如果不兼容,則SerializeClass將一個CArchiveException。運行類必須使用DECLARE_SERIAL和IMPLEMENT_SERIAL,否則,SerializeClass將會一個CNotSupportException。使用RUMTIME_CLASS宏,恢復pRuntimeClass參數的值。基類必須已經使用IMPLEMENT_SERIAL宏。
示例
class CBaseClass:public CObject{…};
class CDerivedClass:public CBaseClass{…};
void CDerivedClass::Serialize(CArchive& ar)
{
if(ar.IsStoring( ))
{
//normal code for storing contents
//of this object
}
else
{
//normal code for reading contents
//of this object }
//allow the base class to serialize along
// with its version information
ar.SerializeClass(RUNTIME_CLASS(CBaseClass));
CBaseClass::Serialize(ar);
}請參閱 CArchive::ReadClass,
CArchive::WriteClass,
CArchive::GetObjectSchema,
CArchive::SetObjectSch_ema,
CArchiveException,
CNotSupportException
CArchive::SetLoadParams
void SetLoadParams(UINT nGrowBy=1024);
參數
nGrowBy
如果必須擴大容量的話,這是分配的元素的最小數。
說明
當要由歸檔文件讀入大量CObject派生對象時,調用SetLoadParams。CArchive使用一個裝載數組,解決對存儲在歸檔文件中的對象的參考。SetLoadParams允許設置裝載數組擴展的大小。在裝載任何對象或調用MapObject或調用ReadObject之后,不需要調用SetLoadParams。
示例
class CMyLargeDocument:public CDocument{…};
void CMyLargeDocument::Serialize(CArchive& ar)
{
if (ar.IsStoring( ))
ar.SetStoreParams( );
//use large defaulte
else
ar.SetLoadParams( );
if (ar.IsStoring( ))
{
//code for storing CMyLargeDocument
}
else
{
//code for loading CMyLargeDocument
}}
請參閱 Cachive::SetStoreParams
CArchive::SetLoadSchema
void SetLoadSchema(UINT nSchema);
參數
nSchema指定對象的大綱。
說明
調用此成員函數,設置存儲在歸檔文件中的對象大綱。將此設置值放入nSchema中。對GetObjectSchema的再一次調用,將返回存儲在nSchema中的值。SetObjectSchema可用于高級版本:例如,當想在一個派生類的Serialize函數中讀入一個特別版本時。
請參閱 CArchive::GetObjectSchema
CArchive::SetStoreParams
void SetStoreParams(UINT nHashSize=2053,UINT nBlockSize=128);
參數
nHashSize
用于指針映射接口的哈希表的大小,必須是一個素數。
nBlockSize
為擴展參數指定內存分配間隔。要獲得最好的執行效果,應該是2的倍數。
說明
當在一個歸檔文件中存儲許多CObject派生對象時,使用SetStoreParams。SetStoreParams允許設定哈希表的大小和映射的塊的大小。映射用來在串行化的過程中標識唯一的對象。在存儲任何一個對象或調用MapObject或WriteObject之后,不需要調用SetStoreParams。
示例
class CMyLargeDocument:public CDocument{…};
void CMyLargeDocument::Serialize(CArchive& ar)
{
if (ar.IsStoring( ))
ar.SetStoreParams( );
//use large defaults
else
ar.SetLoadParams( );
if (ar.IsStoring( ))
{
//code for storing CMyLargeDocument
}
else
{
//code for loading CMyLargeDocument
}
}
請參閱 CArchive::SetLoadParams
CArchive::Write
void Write(const void*lpBuf,UINT nMax);
throw(CFileException);
參數
lpBuf指向提供的緩沖區的指針。緩沖區中包含了將被寫入歸檔文件的數據。
nMax指定要被寫入歸檔文件的字節數的整數。
說明
向歸檔文件寫入特定的字節數。歸檔文件不會格式化字節。可以在Serialize函數中使用Write成員函數,寫入一個包含在對象中的普通結構。
示例
extern CArchive ar;
char pb[100];
ar.Write(pb.100);
請參閱
CArchive::Read
CArchive::WriteClass
void WriteClass(const CRuntimeClass*pClassRef);
參數
pClassRef
指向CRuntimeClass結構的指針。此結構對應于所需要的類的參考。
說明
在一個派生類的串行化過程中,使用WriteClass存儲基類的版本和類信息。WriteClass將基類的CRuntimeClass參考寫入CArchive。使用CArchive::ReadClass恢復參考。WriteClass證明了歸檔文件信息與例程類兼容。如果不兼容,WriteClass
將CArchive::Exception。例程必須使用DECLARE_SERIAL和IMPLEMENT_SERIAL。否則,WriteClass將一個CNotSuppotedException。可以使用SerializeClass代替WriteClass,它將處理類參考的讀與寫。
請參閱
CArchive::ReadClass,
CArchive::GetObjectSchema,
CArchive::SetObjectSchema,
Cachive::Serializ_eClass,
CArchiveException,
CNotSupportException.
CArchive::WriteObjectvoid
WriteObject(const CObject*pOb);
throw(CFileException,CArchiveException);
參數
pOb被存儲對象的常量指針。
說明
將特定的CObject存儲到歸檔文件中。此函數通常由重載CObject的CArchive插入(<<)運算符調用。WriteClass反過來,調用歸檔類的Serialize函數。必須使用IMPLEMENT_SERIAL宏歸檔。WriteObject將ASCII類名寫入歸檔文件。在裝載過程之后,此類名會被驗證。一個特定的編碼設計會防止對于多個對象類名的不必要的重復使用。還能防止是多個指針目
標的對象的多余存儲。正確的對象編碼方法(包括在現在的ASCII類名中)是一個實現細節并且在庫的以后版本中可以改變。
注意
在歸檔之前,結束創建、刪除和修改所有對象。如果把歸檔和對象修改混合,則歸檔文件將會被廢棄。
請參閱 CArchive::ReadObject
CArchive::WriteString
void WriteString(LPCTSTR lpsz);
throw(CFileException);
參數
lpsz使用此成員函數將數據從一個緩沖區寫入與CArchive對象有關的文件中。結束的空字符(‘\0’)不被寫入文件,新行也不自動寫入。WriteString對于幾種情況都可以異常,包括磁盤滿時。Write還是有效的,但不是以空終止符結尾,而是它向文件寫入需要的字節數。
請參閱
CArchive::Write,
CArchive::Read,
CArchive::ReadString,
CFileException
操作符
CArchive::operator<<
friend CArchive& operator<< (CArchive& ar,const CObject* pOb);
throw (CArchiveException,CFileException);
CArchive&operator<<(BYTE by);
throw (CArchiveException,CFileException);
CArchive&operator<<(WORD w);
throw (CArchiveException,CFileException);
CArchive&operator<<( int i);
throw (CArchiveException,CFileException);
CArchive&operator<<( LONG l);
throw (CArchiveException,CFileException);
CArchive&operator<<( DWORD dw);
throw (CArchiveException,CFileException);
CArchive&operator<<( float f);
throw (CArchiveException,CFileException);
CArchive&operator<<( double d);
throw (CArchiveException,CFileException);
返回值
CArchive參考,它可以在一行上使用多個提取運算符。
說明
把確切的對象或主要類型存儲到歸檔文件中。
如果在類的實現中使用IMPLEMENT_SERIAL宏,然后重載CObject的插入運算符調用被保護的WriteObject。此函數反過來調用類的Serialize函數。
示例
long l;
int i;
extern CArchive ar;
if (ar.IsStoring( ))
ar<<l<<i;
請參閱
CArchive::WriteObject,
CObject::Serialize
CArchive::operator>>
friend CArchive& operator>> (CArchive& ar, CObject* pOb);
throw (CArchiveException,CFileException,CMemoryException);
friend CArchive& operator>> (CArchive& ar,const CObject* pOb);
throw (CArchiveException,CFileException,CMemoryException);
CArchive&operator>>(BYTE& by);
throw (CArchiveException,CFileException);
CArchive&operator>>(WORD& w);
throw (CArchiveException,CFileException);
CArchive&operator>>( int& i);
throw (CArchiveException,CFileException);
CArchive&operator>>( LONG& l);
throw (CArchiveException,CFileException);
CArchive&operator>>( DWORD& dw);
throw (CArchiveException,CFileException);
CArchive&operator>>( float& f);
throw (CArchiveException,CFileException);
CArchive&operator>>( double& d);
throw (CArchiveException,CFileException);
返回值
可使多個插入運算符在一行上的CArchive參考。
說明
由歸檔文件裝載確定的對象或主要類型。如果在類的實現中使用IMPLEMENT_SERIAL宏,然后重載CObject的提取運算符調用被保護的ReadObject函數(帶有一個非零的運行時指針)。此函數反過來調用類的Serialize函數。
示例
int i;
extern CArchive ar;
if(ar.IsLoading( ))
ar>>i;
請參閱
CArchive::ReadObject,
CObject::Serialize
數據成員
CArchive::m_pDocument
說明
缺省情況下,設置為NULL。這個指向CDocument的指針可以被設置為CAchive實例的想設置的任何一種情況。一個關于此指針的通用使用就是把有關串行化進程的附加信息傳遞給所有被串行化的對象。在文檔(CDocument派生類)正在串行化時,通過初始化指針歸檔。這樣一來,如果必要的話,文檔中的對象就可以訪問文檔。此指針在串行化時還可以由COleClientItem對象使用。當一個打開文件或保存命令時,框架對正在串行化的文檔設置m_pDocument。如果不是因為打開文件或保存的原因要串行化一個對象鏈接和嵌入(OLE)包容器文檔,則必須明確地設置m_pDocument。舉例來說,當對一個剪貼板串行化一個包容器文檔時,應該這樣做。
請參閱
CDocument,
COleClientItem