按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
诲。然而,Microsoft 很有可能改变CObject::Serialize 的内容,届时没有遵循告诲的人
恐怕就后悔了。
CArchive 类别
谈到Serialize 就不能不谈CArchive,因为serialize 的对象(无论读或写)是一个
CArchive 对象,这一点相信你已经从上面数节讨论中熟悉了。基本上你可以想象archive
相当于文件,不过它其实是文件之前的一个内存缓冲区。所以我们才会在前面的「台
面下的Serialize 奥秘」中看到这样的动作:
BOOL CDocument::OnSaveDocument(LPCTSTR lpszPathName)
{
CFile* pFile = NULL;
pFile = GetFile(lpszPathName; CFile::modeCreate |
CFile::modeReadWrite | CFile::shareExclusive; &fe);
// 令file 和archive 产生关联
531
…………………………………………………………Page 594……………………………………………………………
第篇 深入 MFC 程式設計
CArchive saveArchive(pFile; CArchive::store |
CArchive::bNoFlushOnDelete);
。。。
Serialize(saveArchive); //对着 archive 做serialize 动作
。。。
saveArchive。Close();
ReleaseFile(pFile; FALSE);
}
BOOL CDocument::OnOpenDocument(LPCTSTR lpszPathName)
{
CFile* pFile = GetFile(lpszPathName;
CFile::modeRead|CFile::shareDenyWrite; &fe);
// 令file 和archive 产生关联
CArchive loadArchive(pFile; CArchive::load |
CArchive::bNoFlushOnDelete);
。。。
Serialize(loadArchive); // 对着archive 做serialize 动作
。。。
loadArchive。Close();
ReleaseFile(pFile; FALSE);
}
operator》
CArchive 针对许多C++ 数据类型、Windows 数据类型以及CObject 衍生类别,定义
operator》 多载运算子:
// in AFX。H
class CArchive
{
public:
// Flag values
enum Mode { store = 0; load = 1; bNoFlushOnDelete = 2; bNoByteSwap = 4 };
CArchive(CFile* pFile; UINT nMode; int nBufSize = 4096; void* lpBuf = NULL);
~CArchive();
// Attributes
BOOL IsLoading() const;
BOOL IsStoring() const;
BOOL IsByteSwapping() const;
BOOL IsBufferEmpty() const;
CFile* GetFile() const;
532
…………………………………………………………Page 595……………………………………………………………
第8章 Document…View 深入探討
UINT GetObjectSchema(); // only valid when reading a CObject*
void SetObjectSchema(UINT nSchema);
// pointer to document being serialized …must set to serialize
// COleClientItems in a document!
CDocument* m_pDocument;
// Operations
UINT Read(void* lpBuf; UINT nMax);
void Write(const void* lpBuf; UINT nMax);
void Flush();
void Close();
void Abort(); // close and shutdown without exceptions
// reading and writing strings
void WriteString(LPCTSTR lpsz);
LPTSTR ReadString(LPTSTR lpsz; UINT nMax);
BOOL ReadString(CString& rString);
public:
// Object I/O is pointer based to avoid added construction overhead。
// Use the Serialize member function directly for embedded objects。
friend CArchive& AFXAPI operator(CArchive& ar; CObject*& pOb);
friend CArchive& AFXAPI operator》》(CArchive& ar; const CObject*& pOb);
// insertion operations
CArchive& operator(unsigned& u);
// object read/write
CObject* ReadObject(const CRuntimeClass* pClass);
void WriteObject(const CObject* pOb);
// advanced object mapping (used for forced references)
void MapObject(const CObject* pOb);
// advanced versioning support
void WriteClass(const CRuntimeClass* pClassRef);