青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

CArray詳解

CArchive沒有基類。
CArchive允許以一個永久二進(jìn)制(通常為磁盤存儲)的形式保存一個對象的復(fù)雜網(wǎng)絡(luò),它可以在對象被刪除時,還能永久保存。可以從永久存儲中裝載對象,在內(nèi)存中重新構(gòu)造它們。使得數(shù)據(jù)永久保留的過程就叫作“串行化”。
可以把一個歸檔對象看作一種二進(jìn)制流。象輸入/輸出流一樣,歸檔與文件有關(guān)并允許寫緩沖區(qū)以及從硬盤讀出或讀入數(shù)據(jù)。輸入/輸出流處理一系列ASCII字符,但是歸檔文件以一種有效率、精練的格式處理二進(jìn)制對象。
必須在創(chuàng)建一個CArchive對象之前,創(chuàng)建一個CFile對象。另外,必須確信歸檔文件的裝入/存儲與文件的打開模式是兼容的。每一個文件只限于一個活動歸檔文件。
當(dāng)構(gòu)造一個CArchive對象時,要把它附加給表示一個打開文件的類CFile(或派生類)的對象上。還要指定歸檔文件將用于裝載還是存儲。CArchive對象不僅可以處理首要類型,而且還能處理為串行化而設(shè)計的CObject_派生類的對象。一個串行化類通常有一個Serialize成員函數(shù)并且使用DECLARE_SERIAL和IMPLEMENT_SERIAL宏。這些在CObject類中有所描述。
重載提取(>>)和插入(<<)是方便的歸檔編程接口。它支持主要類型和CObject派生類。
CArchive還支持使用MFC Windows套接字類CSocket和CSocketFile編程。IsBufferEmpty成員函數(shù)也支持這種使用。如果要了解有關(guān)CArchive的更多信息,請參閱聯(lián)機文檔“Visual C++ 程序員指南”中的“串行化(永久對象)” 和“Windows套接字:在歸檔文件中使用套接字”
include<afx.h>
請參閱   CFile,CObject,CSocket,CSocketFile
CArchive類的成員
數(shù)據(jù)成員
m_pDocument 指向被串行化的CDocument對象
構(gòu)造函數(shù)
Carchive 創(chuàng)建一個Carhcive對象
Abort在不異常的情況下,關(guān)閉歸檔文件
Close沖掉未寫入數(shù)據(jù)并且釋放與CFile的連接

基礎(chǔ)輸入/輸出
Flush從歸檔文件緩沖區(qū)中沖掉未寫入數(shù)據(jù)
運算符>>裝載對象和歸檔文件的主要類型
運算符<<存儲對象和歸檔文件的主要類型
Read讀入原始類型
Write寫入原始類型
WriteString寫一行文本
ReadString讀一行文本
狀態(tài)
GetFile獲得此歸檔文件的
CFile對象指針
GetObjectSchema由Serialize函數(shù)調(diào)用來確定被非串行化的對象的版本SetObjectSchema在歸檔文件中存儲對象概要
IsLoading確定歸檔文件是否被裝載
IsStoring確定歸檔文件是否被存儲
IsBufferEmpty確定在一個Windows Socket接收過程中緩沖區(qū)是否被清空
對象輸入/輸出
ReadObject調(diào)用一個用于裝載的Serialize函數(shù)
WriteObect調(diào)用一個用于裝載的Serialize函數(shù)
MapObject在沒有對文件串行化的映射中放置對象,但是此映射對參考的子對象有效
SetStoreParams設(shè)置哈希表的大小和映射的塊的大小,在串行化的過程中識別唯一的對象
LoadParams設(shè)置裝載數(shù)組擴展的大小。必須在被裝載對象之前或調(diào)用MapObject或ReadObject之前
ReadClass讀入一個原先存儲在WriteClass中的類的參考
WriteClass把對CRuntime的參考寫入Carchive
SerializeClass根據(jù)CArchive方向,讀入或?qū)懭雽Archive對象的類的參考

成員函數(shù)
CArchive::Abort
void Abort( );
說明
調(diào)用此函數(shù)在不異常的情況下關(guān)閉歸檔文件。CArchive析構(gòu)程序?qū)⒄{(diào)用Close,它將沖掉任何沒有被存儲在相關(guān)CFile對象中的數(shù)據(jù)。這會引起異常。
當(dāng)獲取這些異常時,有一個好的方法就是使用Abort,這樣析構(gòu)CArchive
對象就不會再引起異常。當(dāng)處理異常時,在失敗時CArchive::Abort將不會異常,因為與CArchive::Clsoe不同,Abort忽略失敗。
如果使用new在堆上分配CArchive對象,則在關(guān)閉文件之后,必須刪除它。
請參閱
CArchive::Close,
Cfile::Close

CArchive::CArchive
CArchive(CFile*pFile,UINTnMode,int nBufSize=4096,void*lpBuf=NULL );
throw(CmemoryException,CArchiveException,CFileException);
參數(shù)
pFileCFile
對象的指針。CFile對象是永久數(shù)據(jù)的最終的源或目標(biāo)。
nMode標(biāo)識。它指定了對象是否從歸檔文件中裝載或存儲到文件中去。
nMode參數(shù)必須有下列值之一:l CArchive::load   從歸檔文件裝載數(shù)據(jù)。CFile只讀。l CArchive::store   把數(shù)據(jù)保存到歸檔文件中。允許CFile寫操作。l CArchive::bNoFlushOnDelete 當(dāng)歸檔文件析構(gòu)程序被調(diào)用時,防止歸檔文件自動調(diào)用Flush。如果設(shè)定了此標(biāo)識,則在析構(gòu)程序被調(diào)用之前必須負(fù)責(zé)調(diào)用Close。如果不這樣做,數(shù)據(jù)就會崩潰。
nBufSize
指定內(nèi)部文件緩沖區(qū)大小的整數(shù),以字節(jié)計算。注意缺省的緩沖區(qū)
大小為4096字節(jié)。如果例程歸檔大的對象,使用大一些的緩沖區(qū),即多個文件緩沖區(qū),那么將會提高例程的執(zhí)行效率。
lpBuf
指向nBufSize大小的提供緩沖區(qū)的指針。如果不指定這個參數(shù),歸檔文 件從本地堆為歸檔文件分配一個緩沖區(qū)并且當(dāng)對象被毀棄時,釋放緩沖 區(qū)。歸檔文件不能釋放一個提供的緩沖區(qū)。
說明
構(gòu)造CArchive對象并且指定它將用于裝載或存儲對象。在創(chuàng)建歸檔文件之后,不能改變這個指定內(nèi)容。不能使用CFile操作來改變文件的狀態(tài)直到已經(jīng)關(guān)閉歸檔文件時。任何這樣的操作都將會毀棄歸檔文件的完整性。通過由GetFile成員函數(shù)獲得歸檔文件的文件對象使得可在串行化過程中的任何時候訪問文件指針的位置。然后使用Cfile::GetPosition函數(shù)。應(yīng)該在獲得文件指針位置之前,調(diào)用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);
說明
沖掉保存在緩沖區(qū)中的任何數(shù)據(jù),關(guān)閉歸檔文件并且釋放歸檔文件與文件的鏈接。對于歸檔文件沒有允許的其它操作。在關(guān)閉一個歸檔文件之后,可以為一個同樣文件創(chuàng)建另一個歸檔文件或者關(guān)閉文件。成員函數(shù)Close保證所有數(shù)據(jù)從歸檔文件傳輸?shù)轿募⑶沂箽w檔文件無效。為了完成從文件到存儲介質(zhì)的傳輸,必須首先使用Cfile::Close并且再毀棄CFile對象。
請參閱   CArchive::Flush,
CArchive::Abort
CArchive::Flush
void Flush( );  
throw( CFileException);
說明
迫使保留在歸檔文件中的數(shù)據(jù)寫入文件。成員函數(shù)Flush保證所有的數(shù)據(jù)從歸檔文件傳輸?shù)轿募1仨氄{(diào)用Cfile::Close來完成從文件到存儲介質(zhì)的傳輸。
請參閱   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函數(shù)調(diào)用此函數(shù),確定當(dāng)前被非串行化的對象的版本。當(dāng)CArchive對象正在被裝載時,調(diào)用此函數(shù)才是有效的(CArchive::IsLoading則返回非零值)。它必須是Serialize函數(shù)的第一次調(diào)用而且只能調(diào)用一次。返回值-1(UINT)說明版本數(shù)未知。CObject派生類可以使用與大綱版本自己(在IMPLEMENT_SERIALH宏里)結(jié)合起來使用的VERSIONABLE_SEHEMA,創(chuàng)建一個“版本化對象”,即一個對象它的成員函數(shù)可以讀入多個版本。當(dāng)版本不匹配時,缺省的框架功能(不帶有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。
說明
調(diào)用此函數(shù),確定歸檔文件的緩沖區(qū)是否為空。此函數(shù)支持使用Windows套接字類CSocketFile編程。對與CFile對象有關(guān)的歸檔文件則不需要使用它。
與CSocketFile對象相關(guān)的歸檔文件使用IsBufferEmpty的原因是歸檔文件的緩沖區(qū)可能包含多個消息或記錄。在接收一個消息時,應(yīng)該使用IsBufferEmpty控制這樣一個循環(huán),它不斷地接收數(shù)據(jù),直到緩沖區(qū)為空。如果要了解更多的內(nèi)容,請參閱類CAsyncSocket的Rceive成員函數(shù)以及MFC高級概念樣例CHATSRVR,它將告訴你如何使用IsBufferEmpty。
如果要了解更多的內(nèi)容,請參閱聯(lián)機文檔“Visual C++程序員指南”中的“Windows套接字:在歸檔文件中使用套接字”。
請參閱   CSocketFile,
CAsyncSocket::Receive

CArchive::IsLoading
BOOL IsLoading( ) const
返回值
如果正在裝載歸檔文件,則返回非零值,否則為0。
說明
確定歸檔文件是否正在裝載數(shù)據(jù)。此成員函數(shù)由歸檔文件類的Serialize函數(shù)調(diào)用。
示例
int i;
extern CArchive ar;
if (ar.Isloading( ))  
ar>>i;else  
ar << i;
請參閱   CArchive::IsStoring

CArchive::IsStoring
BOOL IsStorng( ) const;
返回值
如果正在存儲歸檔文件,則返回非零值,否則為0。
說明
確定是否正在存儲歸檔文件。這個函數(shù)由歸檔文件類的Serialize函數(shù)調(diào)用。如果歸檔文件的IsStoring狀態(tài)為非零,則它的IsLoading狀態(tài)為0,反
之亦然。
示例
int i;
extern CArchive ar;
if( ar.IsStoring( ))  
ar<<i;else   ar>>i;
請參閱   CArchive::IsLoading


CArchive::MapObject
void MapObject(const CObject*pOb);
參數(shù)
pOb指向正在存儲的對象的指針。
說明
調(diào)用此成員函數(shù)在映射中放置對象。此映射沒有真的對文件串行化,但是對參考的子對象有效。舉例來說,可能不想串行化一個文檔,但是想對作為文檔一部分的項串行化。通過調(diào)用MapObject,可允許那些項或子對象參考文檔。而且,串行化子項還可以串行化它們的m_pDocument向后的指針。
當(dāng)要把數(shù)據(jù)存儲到CArchive對象和從它裝載數(shù)據(jù)時,可以調(diào)用MapObject。在串行化和非串行化的過程中,MapObject向由CArchive保持的內(nèi)部數(shù)據(jù)結(jié)構(gòu)添加特定的對象,但是它不象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);
返回值
包含實際讀入字節(jié)數(shù)的無符號整數(shù)。如果返回值小于所需要的數(shù)值,則說明已達(dá)到了文件的末尾。達(dá)到文件末尾時,沒有異常。
參數(shù)
lpBuf指向提供的緩沖區(qū)的指針。這個提供的緩沖區(qū)接收從歸檔文件讀取的數(shù)據(jù)。
nMax標(biāo)明從歸檔文件讀取的字節(jié)數(shù)的無符號指針。
說明
從歸檔文件讀取指定的字節(jié)數(shù)。歸檔文件不解釋字節(jié)數(shù)。可以在Serialize函數(shù)里使用Read成員函數(shù),讀取包含在對象中的普通結(jié)構(gòu)。
示例
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結(jié)構(gòu)的指針。
參數(shù)
pClassRefRequested
指向CRuntimeClass結(jié)構(gòu)的指針,此結(jié)構(gòu)對應(yīng)于所需要的類的參考。可以為NULL。
pSchema
指向原先存儲的運行時類的大綱的指針。
obTag
代表對象的唯一標(biāo)識的數(shù)值。通過ReadObject的實現(xiàn),在內(nèi)部使用。只用于高級編程。obTag通常應(yīng)為NULL。
說明
調(diào)用此成員函數(shù)來讀取一個原先存儲在WriteClass中的類的參考。
如果pClassRefReguested不為NULL,ReadClass證明了歸檔文件類信息與例程類是兼容的。如果不兼容,ReadClass將產(chǎn)生一個CArchiveException。例程必須使用DECLARE_SERIAL和IMPLEMENT_SERIAL,否則,ReadClass將產(chǎn)生一個CNotSupportedException。如果pSchema為NULL,則存儲類的大綱可通過調(diào)用CArchive::GetObjectSchema來恢復(fù),否則,*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安全地指向當(dāng)前的派生類。
參數(shù)
pClass
指向CRumtimeClass結(jié)構(gòu)的常量指針。此結(jié)構(gòu)對應(yīng)于期待讀入的對象。
說明
從歸檔文件中讀入對象并構(gòu)造一個合適類型的對象。此函數(shù)通常由CArchive提取(>>)運算符重載一個CObject指針調(diào)用它。ReadObject,反過來,調(diào)用歸檔文件類的Serlialize函數(shù)。如果提供一個非零的pClass參數(shù),它可以從RUNTIME_CLASS獲得,則函數(shù)確認(rèn)歸檔文件的運行類。假設(shè)在類的實現(xiàn)中已經(jīng)使用IMPLEMENT_SERIAL宏。
請參閱   CArchive::WriteObject,
CObject::IsKindOf

CArchive::ReadStringBool
ReadString(CString&rString);
LPTSTR ReadString(LPTSTR lpsz,UINT nMax);  
throw(CArchiveException);
返回值
在返回邏輯值的版本中,True代表成功;False相反。在返回LPTSTR的版本中,LPTSTR是一個指向包含文字?jǐn)?shù)據(jù)的緩沖區(qū)的指針,NULL代表到達(dá)文件尾。
參數(shù)
rString
CString的一個參考。CString將包含從與CArchive對象有關(guān)的文件中讀出的結(jié)果字符串。
Lpsz
指定一個指向提供的緩沖區(qū)的指針。此緩沖區(qū)將接收一個以空終止符結(jié)尾的文字串。
nMax
指定讀入字符的最大數(shù)。它不允許小于lpsz緩沖區(qū)的大小。
說明
調(diào)用此函數(shù)從與CArchive對象有關(guān)的文件中讀取數(shù)據(jù),放入緩沖區(qū)。在帶有nMax參數(shù)的成員函數(shù)的版本中,緩沖區(qū)最多有nMax-1字符。讀入的操作由一個回車換行符終止。在新行符號后面的字符都被丟棄了。在每種情況下,都有一個空字符(“/0”)。CArchive::Read還對文本-模式輸入有效,但是它不以回車換行符終止。
請參閱   CArchive::Read,
CArchive::WriteString,
CArchiveException

CArchive::SerializeClass
void SerializeClass(const CRuntimeClass*pRuntimeClass);
參數(shù)
pRuntimeClass
指向基類的運行類對象的指針。
說明
當(dāng)想存儲和裝載一個基類的版本信息時,調(diào)用此成員函數(shù)。SerializeClass讀或?qū)Archive對象寫一個類的參考,取決于CArchive的方向。使用SerializeClass來代替ReadClass和WriteClass,可以使得更方便地串行化基類對象。因為SerializeClass需要較少的代碼和參數(shù)。像ReadClass一樣,SerializeClass證明了歸檔文件信息與的例程類兼容。如果不兼容,則SerializeClass將一個CArchiveException。運行類必須使用DECLARE_SERIAL和IMPLEMENT_SERIAL,否則,SerializeClass將會一個CNotSupportException。使用RUMTIME_CLASS宏,恢復(fù)pRuntimeClass參數(shù)的值。基類必須已經(jīng)使用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);
參數(shù)
nGrowBy
如果必須擴大容量的話,這是分配的元素的最小數(shù)。
說明
當(dāng)要由歸檔文件讀入大量CObject派生對象時,調(diào)用SetLoadParams。CArchive使用一個裝載數(shù)組,解決對存儲在歸檔文件中的對象的參考。SetLoadParams允許設(shè)置裝載數(shù)組擴展的大小。在裝載任何對象或調(diào)用MapObject或調(diào)用ReadObject之后,不需要調(diào)用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);
參數(shù)
nSchema指定對象的大綱。
說明
調(diào)用此成員函數(shù),設(shè)置存儲在歸檔文件中的對象大綱。將此設(shè)置值放入nSchema中。對GetObjectSchema的再一次調(diào)用,將返回存儲在nSchema中的值。SetObjectSchema可用于高級版本:例如,當(dāng)想在一個派生類的Serialize函數(shù)中讀入一個特別版本時。
請參閱   CArchive::GetObjectSchema

CArchive::SetStoreParams
void SetStoreParams(UINT nHashSize=2053,UINT nBlockSize=128);
參數(shù)
nHashSize
用于指針映射接口的哈希表的大小,必須是一個素數(shù)。
nBlockSize
為擴展參數(shù)指定內(nèi)存分配間隔。要獲得最好的執(zhí)行效果,應(yīng)該是2的倍數(shù)。
說明
當(dāng)在一個歸檔文件中存儲許多CObject派生對象時,使用SetStoreParams。SetStoreParams允許設(shè)定哈希表的大小和映射的塊的大小。映射用來在串行化的過程中標(biāo)識唯一的對象。在存儲任何一個對象或調(diào)用MapObject或WriteObject之后,不需要調(diào)用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);
參數(shù)
lpBuf指向提供的緩沖區(qū)的指針。緩沖區(qū)中包含了將被寫入歸檔文件的數(shù)據(jù)。
nMax指定要被寫入歸檔文件的字節(jié)數(shù)的整數(shù)。
說明
向歸檔文件寫入特定的字節(jié)數(shù)。歸檔文件不會格式化字節(jié)。可以在Serialize函數(shù)中使用Write成員函數(shù),寫入一個包含在對象中的普通結(jié)構(gòu)。
示例
extern CArchive ar;
char pb[100];
ar.Write(pb.100);
請參閱  
CArchive::Read

CArchive::WriteClass
void WriteClass(const CRuntimeClass*pClassRef);
參數(shù)
pClassRef
指向CRuntimeClass結(jié)構(gòu)的指針。此結(jié)構(gòu)對應(yīng)于所需要的類的參考。
說明
在一個派生類的串行化過程中,使用WriteClass存儲基類的版本和類信息。WriteClass將基類的CRuntimeClass參考寫入CArchive。使用CArchive::ReadClass恢復(fù)參考。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);
參數(shù)
pOb被存儲對象的常量指針。
說明
將特定的CObject存儲到歸檔文件中。此函數(shù)通常由重載CObject的CArchive插入(<<)運算符調(diào)用。WriteClass反過來,調(diào)用歸檔類的Serialize函數(shù)。必須使用IMPLEMENT_SERIAL宏歸檔。WriteObject將ASCII類名寫入歸檔文件。在裝載過程之后,此類名會被驗證。一個特定的編碼設(shè)計會防止對于多個對象類名的不必要的重復(fù)使用。還能防止是多個指針目
標(biāo)的對象的多余存儲。正確的對象編碼方法(包括在現(xiàn)在的ASCII類名中)是一個實現(xiàn)細(xì)節(jié)并且在庫的以后版本中可以改變。
注意  
在歸檔之前,結(jié)束創(chuàng)建、刪除和修改所有對象。如果把歸檔和對象修改混合,則歸檔文件將會被廢棄。
請參閱   CArchive::ReadObject

CArchive::WriteString
void WriteString(LPCTSTR lpsz);  
throw(CFileException);
參數(shù)
lpsz使用此成員函數(shù)將數(shù)據(jù)從一個緩沖區(qū)寫入與CArchive對象有關(guān)的文件中。結(jié)束的空字符(‘\0’)不被寫入文件,新行也不自動寫入。WriteString對于幾種情況都可以異常,包括磁盤滿時。Write還是有效的,但不是以空終止符結(jié)尾,而是它向文件寫入需要的字節(jié)數(shù)。
請參閱  
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參考,它可以在一行上使用多個提取運算符。
說明
把確切的對象或主要類型存儲到歸檔文件中。
如果在類的實現(xiàn)中使用IMPLEMENT_SERIAL宏,然后重載CObject的插入運算符調(diào)用被保護(hù)的WriteObject。此函數(shù)反過來調(diào)用類的Serialize函數(shù)。
示例
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參考。
說明
由歸檔文件裝載確定的對象或主要類型。如果在類的實現(xiàn)中使用IMPLEMENT_SERIAL宏,然后重載CObject的提取運算符調(diào)用被保護(hù)的ReadObject函數(shù)(帶有一個非零的運行時指針)。此函數(shù)反過來調(diào)用類的Serialize函數(shù)。
示例
int i;
extern CArchive ar;
if(ar.IsLoading( ))  
ar>>i;
請參閱  
CArchive::ReadObject,
CObject::Serialize

數(shù)據(jù)成員
CArchive::m_pDocument
說明
缺省情況下,設(shè)置為NULL。這個指向CDocument的指針可以被設(shè)置為CAchive實例的想設(shè)置的任何一種情況。一個關(guān)于此指針的通用使用就是把有關(guān)串行化進(jìn)程的附加信息傳遞給所有被串行化的對象。在文檔(CDocument派生類)正在串行化時,通過初始化指針歸檔。這樣一來,如果必要的話,文檔中的對象就可以訪問文檔。此指針在串行化時還可以由COleClientItem對象使用。當(dāng)一個打開文件或保存命令時,框架對正在串行化的文檔設(shè)置m_pDocument。如果不是因為打開文件或保存的原因要串行化一個對象鏈接和嵌入(OLE)包容器文檔,則必須明確地設(shè)置m_pDocument。舉例來說,當(dāng)對一個剪貼板串行化一個包容器文檔時,應(yīng)該這樣做。
請參閱  
CDocument,
COleClientItem

posted on 2008-04-02 15:47 wrh 閱讀(1994) 評論(0)  編輯 收藏 引用


只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


導(dǎo)航

<2011年8月>
31123456
78910111213
14151617181920
21222324252627
28293031123
45678910

統(tǒng)計

常用鏈接

留言簿(19)

隨筆檔案

文章檔案

收藏夾

搜索

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久国内精品视频| 136国产福利精品导航网址应用 | 欧美高清视频一区二区三区在线观看| 亚洲在线网站| 亚洲欧美日本国产有色| 亚洲午夜电影在线观看| 午夜精品福利一区二区蜜股av| 亚洲午夜国产一区99re久久| 亚洲尤物在线| 久久国产精品色婷婷| 久久综合网色—综合色88| 欧美韩日一区二区| 亚洲另类黄色| 新67194成人永久网站| 欧美一区二区三区视频在线 | 欧美日本亚洲| 国产精品久久久久久av福利软件 | 欧美激情亚洲自拍| 欧美日韩一区二区三区在线| 国产精品推荐精品| 亚洲国产精品123| 亚洲欧美日韩网| 女同一区二区| 一区二区三区国产在线观看| 欧美在线日韩精品| 欧美日韩激情小视频| 国产精品自在欧美一区| 亚洲国产小视频| 欧美在线视频一区二区三区| 亚洲大胆在线| 亚洲午夜精品久久久久久app| 久久激情婷婷| 国产精品家庭影院| 亚洲毛片一区二区| 免费一级欧美在线大片| 亚洲午夜91| 欧美激情一区二区三区高清视频| 国产婷婷精品| 午夜精品久久久久99热蜜桃导演| 欧美激情综合| 久久精品日产第一区二区| 国产精品久久久久久久久| 亚洲国产精品成人| 久久一区二区三区av| 亚洲欧美国产三级| 欧美日韩国产三级| 亚洲欧洲日韩综合二区| 欧美一级黄色网| 亚洲美女在线看| 免费在线成人| 亚洲日本欧美| 欧美高清不卡| 久久亚洲欧美国产精品乐播| 国产精品一区在线观看| 亚洲愉拍自拍另类高清精品| 91久久综合| 欧美黄色片免费观看| 亚洲电影免费观看高清完整版在线观看 | 羞羞漫画18久久大片| 欧美日韩国产123| 亚洲国产精品久久| 欧美成人一区二区三区| 快播亚洲色图| 亚洲精品久久久久久久久久久| 免费短视频成人日韩| 快播亚洲色图| 亚洲精品日韩在线| 欧美日韩成人| 欧美激情乱人伦| 亚洲区免费影片| 亚洲国产网站| 欧美人体xx| 亚洲专区国产精品| 亚洲欧美国产制服动漫| 国产一区导航| 欧美wwwwww| 欧美丰满高潮xxxx喷水动漫| 99ri日韩精品视频| 亚洲午夜性刺激影院| 国产精品中文字幕在线观看| 久久久久久亚洲精品杨幂换脸| 久久九九精品99国产精品| 亚洲国产日韩美| 一本久道久久综合中文字幕| 国产久一道中文一区| 玖玖在线精品| 欧美日韩国产一级| 久久久国产精品一区二区三区| 久久一区二区三区av| 日韩一区二区免费高清| 亚洲男人第一网站| 亚洲激情网站| 亚洲一区二区三区乱码aⅴ蜜桃女| 国产精品一区三区| 亚洲国产高清自拍| 国产乱码精品一区二区三区不卡| 久久综合一区二区| 国产精品h在线观看| 久久综合色播五月| 欧美日韩在线三级| 另类综合日韩欧美亚洲| 欧美天堂亚洲电影院在线播放| 欧美在线亚洲一区| 欧美精品在线一区二区| 久久露脸国产精品| 欧美精品一区视频| 久久综合九色综合久99| 欧美日韩一区二区视频在线 | 国产农村妇女毛片精品久久莱园子| 老色鬼精品视频在线观看播放 | 国产手机视频精品| 亚洲人成啪啪网站| 国内视频精品| 亚洲午夜91| 亚洲毛片一区二区| 久久在线91| 久久精品日产第一区二区三区| 欧美精品在线免费播放| 欧美阿v一级看视频| 国产视频久久网| 亚洲午夜精品17c| 日韩视频在线一区| 免费成人高清视频| 乱中年女人伦av一区二区| 国产欧美一级| 亚洲欧美日韩国产综合在线| 亚洲一区二区3| 欧美另类极品videosbest最新版本| 欧美日韩情趣电影| 久久青青草原一区二区| 国产精品久久久久久久久久ktv| 亚洲高清影视| 在线免费一区三区| 久久久久久久久久久成人| 欧美一级视频免费在线观看| 欧美日韩视频在线| 亚洲毛片一区二区| 99国产精品久久久久老师 | 亚洲人成人一区二区三区| 亚洲第一视频网站| 久久综合久久88| 嫩草成人www欧美| 亚洲高清久久网| 免费欧美网站| 亚洲国产精品一区| 99精品热6080yy久久| 欧美精品国产| 一本色道久久综合亚洲二区三区| 国产精品99久久久久久久久| 欧美体内谢she精2性欧美| 一区二区三区国产在线观看| 亚洲女同精品视频| 国产日韩欧美三级| 久久精品国产2020观看福利| 两个人的视频www国产精品| 亚洲国产精品久久91精品| 欧美大片在线看免费观看| 亚洲精品一区在线观看| 亚洲摸下面视频| 国产日韩精品一区二区| 久久免费视频网站| 亚洲欧洲美洲综合色网| 亚洲男人的天堂在线观看 | 好吊妞**欧美| 免费在线观看精品| 一本色道久久88亚洲综合88| 欧美伊久线香蕉线新在线| 伊人成人网在线看| 欧美日韩国产va另类| 午夜精品久久久久久久99热浪潮| 久久精品国产成人| 亚洲久久成人| 国产午夜亚洲精品不卡| 欧美91视频| 亚洲欧美日韩精品久久亚洲区| 老司机精品福利视频| 一区二区三区视频观看| 国模私拍视频一区| 欧美色大人视频| 久久午夜影视| 亚洲精品看片| 葵司免费一区二区三区四区五区| 一本色道88久久加勒比精品| 国产日本欧洲亚洲| 欧美日韩性视频在线| 久久精品一二三| 中日韩美女免费视频网址在线观看 | 欧美风情在线| 巨胸喷奶水www久久久免费动漫| 欧美大片免费久久精品三p | 欧美aⅴ99久久黑人专区| 日韩午夜高潮| 男人的天堂亚洲| 久久精品人人做人人爽| 亚洲综合精品四区| 日韩视频免费观看| 亚洲国产成人porn| 精品999成人| 国产一区二区精品久久91| 欧美亚一区二区|