Using Structured StorageManaging Properties

構造化ストレージの利用

全てのプロパティは、(プロパティセットに含まれるユニークな) 1つのプロパティ識別子、値の型を表すバリアントタイプタグ( VT または VarType と表記)、そしてそれ自身に対する値によって成り立ちます。 バリアントタイプタグは、データの値を表します。 加えて、プロパティには数値化されたプロパティ識別子(ID)を使用することなく特性を識別することが可能な string name を割り当てられる場合があります。 プロパティの作成および管理を行うために、COM は IPropertyStorage インターフェイスを定義します。

IPropertyStorage インターフェースには、プロパティまたはプロパティ名の配列の、読み込みや書き出しのメソッドが含まれます。 このインターフェースには、IStorage の同名のメソッドと同じような Commit() と Revert() メソッドが含まれます。 プロパティセットにクラス識別子(CLSID)を設定したり、それに関係する時刻を設定、プロパティセットに関する統計情報を得る事ができるユーティリティメソッド があります。 そして、列挙子を作成し、IEnumSTATPROPSTG インタフェースへのポインタを返す列挙メソッドがあります インタフェースのこのメソッドを呼び出して、このプロパティセット内のプロパティに関する情報を提供する、オブジェクトの STATPROPSTG 構造体を列挙できます。

下の例は、プロパティがどのように表示されるかの例です。 プロパティセットの特定のプロパティが動物の学名を格納している場合、その名前は 0終端文字列として保存されます。 0終端文字列値で識別される型指定子の名前が保存されます。 これらのプロパティは、下記のような特性を持っているとします。

プロパティID 文字列識別子 型識別子 表す値
02 PID_ANIMALNAME VT_LPWSTR 0終端ユニコード文字列
03 PID_LEGCOUNT VT_I2 WORD(unsigned short)

プロパティセットの(そのフォーマット識別子(FMTID)によって識別される)形式を認識する全てのアプリケーションは、PID_ANIMALNAME 識別子によってプロパティを検索でき、それが 0終端文字列であることを理解し、値を読み書きできます。 アプリケーションは IPropertyStorage.ReadMultiple() を呼び出し、プロパティセット(予め保持しているポインタ)の任意、または全てを読み出す事ができますが、プロパティセットをどのように解釈するかを知っている必要があります。

プロパティ値は、 PROPVARIANT 型のインスタンスとして、プロパティインターフェイスを通して渡されます。

格納された(永続的な)プロパティと実行時のプロパティを区別することは重要です。 バリアント型定数値は VT_ で始まる名前を持っています。 ただし、PROPVARIANT の有効なセットは、オートメーションや ActiveX コントロールで使用される VARIANT のセットと完全に等価ではありません。

二つの構造体で異なるのは、それぞれに許容される VT_ (Variant Type / VarType) タグのセットのみです。 厳密なプロパティの型が VARIANTPROPVARIANT の両方で使用できる場合、型タグ(VT_値)は常に同じです。 そして、VT_値 に対する VARIANTPROPVARIANT 内で使用されるメモリ内表現も同一です。 これらの条件により、この方法では、クライアントが有効で適切なポインタのキャストを同時に実装する場合、型システムが利用できない型タグを捉えられます。

詳細な情報は、プロパティストレージの考察セクション参照してください。