次の方法で共有


CPersistStream クラス

CPersistStream クラスの階層

CPersistStream は、フィルタの永続的なプロパティ (保存されたグラフのフィルタ プロパティ) の基底クラスである。

CPersistStream を使う簡単な方法は次のとおりである。

  1. フィルタがこのクラスを継承するようにする。

  2. クラスに WriteToStream および ReadFromStream を実装する。これらは、ここに示すプレースホルダとしてのみ機能する関数をオーバーライドする。

  3. NonDelegatingQueryInterface を、IPersistStrea を処理するように変更する。

  4. 保存するデータのバイト数の上限を返す SizeMax を実装する。

    Unicode™ のデータを保存する場合は、WCHAR が 2 バイトであることに注意する。

  5. データが変更されたときに、SetDirty を呼び出す。

バージョン番号

ある時点で、データのフォーマットを変更または拡張したい場合がある。この場合、以前に保存したすべてのストリームにバージョン番号を付けて、ストリームを読み取ったときに、ストリームが古いフォーマットであるか、新しいフォーマットであるかを区別できるようにする必要がある。これを行うために、このクラスはバージョン番号の読み書きを行う。書き込み時には、このクラスは GetSoftwareVersion を呼び出して、そのときに使われているソフトウェアのバージョンを問い合わせる。実質的に、これがファイル内のデータ レイアウトのバージョン番号になる。このクラスは、データ内の最初の項目としてこれを書き込む。バージョン番号を変更する場合は、GetSoftwareVersion を実装 (オーバーライド) する。このクラスは、ReadFromStream を呼び出す前に、ファイルから mPS_dwFileVersion にバージョン番号を読み取るので、ReadFromStreammPS_dwFileVersion をチェックして、古いバージョンのファイルを読み取っているかどうかを確認できる。通常、ファイルを読み取るソフトウェアのバージョン以前のバージョンのファイルを受け入れる必要がある。

プロテクト データ メンバ

mPS_dwFileVersion ファイルのバージョン番号。
mPS_fDirty このストリームのデータを保存しなければならない。

メンバ関数

CPersistStream CPersistStream オブジェクトを作成する。
SetDirty オブジェクトをストリームに保存しなければならないことを示す。

オーバーライド可能なメンバ関数

GetClassID このストリームのクラス識別子を取得する。
GetSoftwareVersion このファイル フォーマットのバージョン番号を取得する。
ReadFromStream ストリームからフィルタのデータを読み取る。
SizeMax データで必要なバイト数 (バージョン番号を含まない) を取得する。
WriteToStream ストリームにフィルタのデータを書き込む。

CPersistStream は IPersistStream を実装する。実装の詳細については、Microsoft Platform SDK の「COM リファレンス」を参照すること。

実装される IPersistStream メソッド

GetSizeMax データで必要なバイト数 (バージョン番号を含む) を取得する。
IsDirty オブジェクトを保存しなければならないかどうかをチェックする。
Load データをストリームからメモリにロードする。
Save データをメモリからストリームに保存する。