プロパティ セットの格納
アプリケーションは、ドキュメントの状態データの一部を公開して、他のアプリケーションがそのデータを見つけて読み取ることができるようにすることができます。 たとえば、ワード プロセッサを使用して作成されたドキュメントの作成者、タイトル、キーワード、またはドキュメントで使用されるフォントの一覧を記述するプロパティ セットがあります。 この機能はドキュメントに限定されません。埋め込みオブジェクトでも使用できます。 一般に、プロパティ セットへのアクセスは 、IPropertySetStorage インターフェイスと IPropertyStorage インターフェイスを介して行う必要がありますが、このセクションでは、以前に推奨されていた方法について説明します。
Note
アプリケーションの内部にあるプロパティ セットを格納する場合は、次のガイドラインを使用しない場合があります。 プロパティ セットを他のアプリケーションに公開するには、次のガイドラインに従います。
複合ファイルにプロパティ セットを格納するには
- データ ストリームと同じレベルのストレージ構造に IStorage または IStream インスタンスを作成します。 IStorage または IStream インスタンスの名前に "\005" を付けます。0x05で始まるストリーム名とストレージ名は、アプリケーション間で共有できる共通のプロパティ セット用に予約されています。 また、その値で始まるストリームは 256 KB に制限されます。 名前は、パブリッシュされた名前と形式から選択するか、プロパティ セットに FMTID を割り当て、 ストレージ オブジェクトの名前付け規則で説明されている規則に従って FMTID から名前を派生させます。
- プロパティ セットは、1 つの IStream インスタンスに格納することも、複数のストリームとストレージを含む IStorage インスタンスに格納することもできます。 IStorage インスタンスの場合、Contents という名前の包含ストリームは、プロパティ値を含むプライマリ ストリームです。一部の値は、このプロパティ セットのストレージ内の他のストリームまたはストレージ インスタンスの名前である場合があります。
- プロパティ値へのプログラムによるアクセスを表示または提供できるオブジェクト クラスの CLSID を指定します。 このようなクラスがない場合は、CLSID をプロパティ セットの形式識別子に設定する必要があります。 IStorage インスタンスを使用するプロパティ セットの場合は、IStorage インスタンスの CLSID を Contents ストリームに格納されているのと同じに設定するか、CLSID_NULLに設定します。新しく作成された IStorage インスタンスの値。
- 辞書の内容を形成する表示可能な名前を指定するオプションがあります。
一部のアプリケーションでは、 IStream インスタンスとして格納されているプロパティ セットの実装のみを読み取ることができます。 プロパティ セットの定義で特に示されていない限り、プロパティ セットが IStorage インスタンスまたは IStream インスタンスに格納される可能性があることを想定して、アプリケーションを記述する必要があります。 たとえば、Summary Information プロパティ セットの定義では、名前付き IStream インスタンスにのみ格納できると示されています。 プロパティ セットを検索していて、それがストレージかストリームかがわからない場合は、最初にプロパティ セット名を持つ IStream インスタンスを探します。 失敗した場合は、 IStorage インスタンスを探します。
IStorage 実装でのプロパティ セットの格納について理解を深めるために、動物に関する情報を編集するアプリケーションのクラスがあるとします。 まず、この一連のアプリケーションに CLSID (CLSID_AnimalApp) が定義されているため、動物情報 (FMTID_AnimalInfo) を含むプロパティ セットと、医療情報 (FMTID_MedicalInfo) を含む他のプロパティ セットを理解していることを示すことができます。
IStorage (File): "C:\OLE\REVO.DOC"
IStorage: "\005AnimalInfo", CLSID = CLSID_AnimalApp
IStream: "Contents"
WORD wByteOrder, WORD wFmtVersion, DWORD dwOSVer,
CLSID CLSID_AnimalApp, DWORD cSections...
...
FMTID = FMTID_AnimalInfo
Property: Type = PID_ANIMALTYPE, Type = VT_LPWSTR,
Value = L"Dog"
Property: Type = PID_ANIMALNAME, Type = VT_LPWSTR,
Value = L"Revo"
Property: Type = PID_MEDICALHISTORY, Type = VT_STREAMED_OBJECT,
Value = "MedicalInfo"
...
IStream: "MedicalInfo"
WORD wByteOrder, WORD wFmtVersion, DWORD dwOSVer,
CLSID CLSID_AnimalApp, DWORD cSections...
...
FMTID = CLSID_MedicalInfo
Property: Type = PID_VETNAME, Type = VT_LPWSTR,
Value = L"Dr. Woof"
Property: Type = PID_LASTEXAM, Type = VT_DATE, Value = ...
IStorage インターフェイスと両方のプロパティ セットの CLSID がCLSID_AnimalAppされていることに注意してください。 これにより、これらのプロパティ セットへのプログラムによるアクセスを表示または提供できるアプリケーションが識別されます。 どのアプリケーションでも、プロパティ セット内のデータ (プロパティ セットの背後にあるポイント) を読み取ることができますが、プロパティ セット内のデータの意味を理解できるのは、CLSID_AnimalApp のクラス識別子で識別されたアプリケーションだけです。