CArchive
CArchive
には、単純なデータ型の書き込みと読み取り、およびファイルとの間の<<のための>>演算子とCObject
演算子が用意されています。
アーカイブを使用してファイルにオブジェクトを格納するには
次の例は、アーカイブを使用してファイルにオブジェクトを格納する方法を示しています。
CArchive ar(&theFile, CArchive::store); WORD wEmployeeID = 78; ar << wEmployeeID;
以前にファイルに格納された値からオブジェクトを読み込むには
次の例は、以前にファイルに格納された値からオブジェクトを読み込む方法を示しています。
CArchive ar(&theFile, CArchive::load); WORD wEmployeeID; ar >> wEmployeeID;
通常、Serialize
派生クラスのCObject
関数のアーカイブを介してファイルとの間でデータを格納および読み込みます。DECLARE_SERIALIZE マクロで宣言する必要があります。
CArchive
オブジェクトへの参照は、Serialize
関数に渡されます。
IsLoading
オブジェクトのCArchive
関数を呼び出して、ファイルからデータを読み込むか、ファイルにデータを格納するためにSerialize
関数が呼び出されたかを判断します。
シリアル化可能なSerialize
派生クラスのCObject
関数は、通常、次の形式になります。
void CSerializableObj::Serialize(CArchive &archive)
{
// call base class function first
// base class is CObject in this case
CObject::Serialize(archive);
// now do the stuff for our specific class
if (archive.IsStoring())
{
// TODO: add storing code here
}
else
{
// TODO: add storing code here
}
}
上記のコード テンプレートは、AppWizard がドキュメントの Serialize
関数 ( CDocument
から派生したクラス) 用に作成したものとまったく同じです。 このコード テンプレートは、次の例のように、格納するコードと読み込みコードが常に並列である必要があるため、確認しやすいコードを記述するのに役立ちます。
void CEmployee::Serialize(CArchive &archive)
{
// call base class function first
// base class is CObject in this case
CObject::Serialize(archive);
// now do the stuff for our specific class
if (archive.IsStoring())
archive << m_strName << m_wAge;
else
archive >> m_strName >> m_wAge;
}
このライブラリは、<<
の>>
演算子とCArchive
演算子を最初のオペランドとして定義し、次のデータ型とクラス型を 2 番目のオペランドとして定義します。
BYTE
CObject*
COleCurrency
COleDateTime
COleDateTimeSpan
COleVariant
CString
CTime
と CTimeSpan
Double
DWORD
Float
Int
LONG
POINT
と CPoint
RECT
と CRect
SIZE
と CSize
WORD
注
アーカイブを使用して CObject
を格納および読み込むには、追加の考慮事項が必要です。 詳細については、「 アーカイブを使用した CObject の格納と読み込み」を参照してください。
CArchive
<<
演算子と>>
演算子は常に、最初のオペランドであるCArchive
オブジェクトへの参照を返します。 これにより、次に示すように、演算子を連結できます。
archive << m_strName << m_wAge;