プロパティの管理
すべてのプロパティは、 プロパティ識別子 (プロパティ セット内で一意)、値の型を表す バリアント型 (VT または VarType) タグ 、および 値 自体で構成されます。 バリアント型タグは、値内のデータの表現を記述します。 さらに、プロパティには、必要な数値プロパティ識別子 (ID) を使用するのではなく、プロパティを識別するために使用できる 文字列名 を割り当てることもできます。 プロパティを作成および管理するために、COM は IPropertyStorage インターフェイスを 定義します。
IPropertyStorage インターフェイスには、プロパティ名またはプロパティ名の配列を読み書きするためのメソッドが含まれています。 インターフェイスには、同じ名前の IStorage メソッドに似た Commit メソッドと Revert メソッドが含まれています。 プロパティ セットのクラス識別子 (CLSID) を設定し、セットに関連付けられている時間を設定し、プロパティ セットに関する統計情報を取得できるユーティリティ メソッドがあります。 最後に、 Enum メソッドは列挙子を作成し、その IEnumSTATPROPSTG インターフェイスへのポインターを返します。 このインターフェイスのメソッドを呼び出して、オブジェクトの STATPROPSTG 構造体を列挙できます。これにより、現在のプロパティ セット内のすべてのプロパティに関する情報が提供されます。
プロパティの表現方法の例を次に示します。 プロパティ セット内の特定のプロパティに動物の科学的名が含まれる場合、その名前は 0 で終わる文字列として格納できます。 名前と共に格納されるは、値が 0 で終わる文字列であることを示す型インジケーターになります。 これらのプロパティには、次の特性が含まれる場合があります。
プロパティ ID | 文字列識別子 | 型を表すインジケーター | 表される値 |
---|---|---|---|
02 | PID_ANIMALNAME | VT_LPWSTR | 0 で終わる Unicode 文字列 |
03 | PID_LEGCOUNT | VT_I2 | WORD |
プロパティ セットの形式を認識するアプリケーション (形式識別子 (FMTID) を使用して識別する) は、プロパティをPID_ANIMALNAMEの識別子で確認し、0 で終わる文字列であると判断し、値の読み取りと書き込みを行うことができます。 アプリケーションは IPropertyStorage::ReadMultiple を呼び出して(最初にポインターを取得した) プロパティ セットの一部またはすべてを読み取ることができますが、アプリケーションはプロパティ セットを解釈する方法を知っている必要があります。
プロパティ値は、プロパティ インターフェイスを介して PROPVARIANT 型のインスタンスとして渡されます。
これらの格納された (永続的な) プロパティと実行時プロパティを区別することが重要です。 バリアント型の値定数には、VT_で始まる名前があります。 ただし、有効な PROPVARIANT のセットは、オートメーションおよび ActiveX コントロールで使用される VARIANT のセットと完全に同じではありません。
2 つの構造体の唯一の違いは、それぞれのVT_ (Variant Type/VarType) タグの許容されるセットです。 VARIANT と PROPVARIANT の両方で特定のプロパティ型を使用できる場合、型タグ (VT_値) は常に同じ値を持ちます。 また、特定のVT_値に対して、VARIANT と PROPVARIANT で使用されるメモリ内表現は同じです。 すべてをまとめると、このアプローチにより、型システムは許可されていない型タグをキャッチできます。同時に、知識豊富なクライアントは、必要に応じてポインター キャストを実装できます。
詳細については、次の「 プロパティ ストレージに関する考慮事項」セクションを参照してください。