Managing Property SetsStoring Property Sets

プロパティセットの保存

アプリケーションは、別のアプリケーションが情報を探して読み取れるように、ドキュメントの幾つかの状態を公開できます。 例として、著者名、タイトル、ワードプロセッサによって作成されたドキュメントのキーワード、ドキュメントで使用されているフォントのリストなどを記述するプロパティセットが挙げられます。 この利便性はドキュメントに制限されず、埋め込みオブジェクトにも使用することができます。 一般的に、プロパティセットへのアクセスは IPropertySetStorageIPropertyStorage インタフェースを通すべきですが、このセクションでは以前に推奨された方法について記載します。

注意: 自分が作成したアプリケーションで内部的にプロパティセットを構築する場合、以下に記載されたガイドラインが必要ではないかもしれません。 他のアプリケーションに対してプロパティセットを公開したい場合、これらのガイドラインに従う必要があります。

複合ファイルのプロパティセット構築について

  1. このデータストリームのストレージ構造体の同じレベル上に、IStorage または IStream インタフェースを作成します。 IStorage または IStream インスタンスは "\005." を伴う名前にします。 0x05 から開始されるストリームとストレージの名前は、アプリケーション間で共有が可能なコモンプロパティセットによって予約されています。 また、この値で始まるストリームには 256K 制限があります。 この名前には、著者名とフォーマットまたは、プロパティセットに割り当てられている FMTID と、ストレージオブジェクトの命名規則で記述されている規約によって FMTID から取得される名前のどちらかを選択することができます。
  2. プロパティセットは単体の IStream インスタンスまたは、複合ストリームとストレージに含まれる IStorage インスタンスに保存されているかもしれません。 IStorage インスタンスの場合、Contents と命名されている プロパティ値のあるプライマリストリームがインスタンスに含まれており、いくつかの値はこのプロパティセット用のストレージ を保持している別のストリームまたはストレージ のインスタンスの名前かもしれません。
  3. 表示可能またはプロパティ値へのプログラムアクセスを提供するオブジェクトクラスの CLSID を指定します。 該当するクラスがない場合、CLSID は プロパティセットのフォーマット識別子を設定します。 IStorage インスタンスを使用するプロパティセット には、Contents ストリームに保存されているのと同じ IStorage インスタンスの CLSID または、CLSID_NULL (IStorage インタフェースの新規に作成された値) のどちらかを設定します。
  4. オプションとして、ディクショナリの内容から名前が表示されるかを指定することができます。

アプリケーションでは、IStream インスタンスで保存された プロパティセットをリードオンリに実装することができます。 アプリケーションは、他のアプリケーションで定義されているプロパティセットがなくても、プロパティセットが IStorage インスタンスまたは IStream インスタンスのどちらかに保存されていることを予想し書き込む必要があります。 たとえば、サマリインフォメーションプロパティセットの定義では、名前のある IStream インスタンスにのみ保存可能です。 プロパティセットを検索する場合で、このストレージまたはストリームについて知らない場合、作成したプロパティセット名のある IStream インスタンスをまず確認します。 これに失敗したら、IStorage インスタンスを確認します。

IStorage 実装上でのプロパティセットの構築についてより理解するために、 動物(animals)についての情報を編集するアプリケーションのクラスを想像してみます。 まず、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 インタフェースとプロパティセットの CLSIDCLSID_AnimalApp となります。 これは、これらのプロパティセットの 表示が可能であるのと/または プログラムのアクセスを提供することが可能なアプリケーションを識別します。 アプリケーションは、プロパティセット内(指定されたプロパティセット以降)の情報を読み取ることができますが、CLSID_AnimalApp のクラス識別子で識別されたアプリケーションのみが、プロパティセット内のデータの意味を理解することができます。