IPersistPropertyBag
COM公式ドキュメント
IPropertyBag および IErrorlog と連携して、個々のプロパティに基づく永続化メカニズムを定義します。
解説(Remarks)
IPersistPropertyBag は、IPropertyBag インターフェイスを備えたオブジェクトを提供し、これを通じて個々のプロパティを保存および読み込みできます。IPropertyBag を実装するオブジェクトは、テキストファイル内の名前と値のペアなど、さまざまな方法でこれらのプロパティを保存できます。処理中に (いずれの側で) 発生したエラーは、IErrorlog を通じてエラーログに記録されます。このエラー報告メカニズムは、すべてのプロパティをまとめて処理するのではなく、プロパティ単位で機能します。
メソッド 3
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
新しく作成されたオブジェクトとして初期化されていることをオブジェクトに通知します。
解説(Remarks)
プロパティバッグ内で利用可能なプロパティを使用して自身を初期化し、エラーが発生した場合は指定されたエラーログオブジェクトに通知するようオブジェクトに指示します。
| pPropBag | IPropertyBag* | in | 呼び出し側のプロパティバッグのアドレス。これを通じてオブジェクトはプロパティを読み取ることができます。NULL にはできません。 |
| pErrorLog | IErrorLog* | in | 呼び出し側のエラーログのアドレス。オブジェクトは初期化中に発生したエラーをここに格納します。NULL を指定することもでき、その場合、呼び出し側はエラーを受け取りません。 |
解説(Remarks)
オブジェクトは IPropertyBag ポインターを保持できないため、すべてのプロパティの読み込みは IPersistPropertyBag::Load 関数の呼び出し内で行う必要があります。
このインターフェイスを実装するオブジェクトはインターフェイスの全機能をサポートしなければならないため、E_NOTIMPL は有効な戻りコードではありません。
オブジェクトのプロパティを指定されたプロパティバッグに保存し、必要に応じてオブジェクトのダーティフラグをクリアするようオブジェクトに指示します。
| pPropBag | IPropertyBag* | in | 呼び出し側のプロパティバッグのアドレス。これを通じてオブジェクトはプロパティを書き込むことができます。NULL にはできません。 |
| fClearDirty | BOOL | in | 「Save」操作の完了時にオブジェクトがダーティフラグをクリアすべきかどうかを示すフラグ。TRUE はフラグをクリアすること、FALSE はフラグをそのまま維持することを意味します。FALSE は、呼び出し側が「名前を付けてコピーを保存」操作を実行する場合に使用されます。 |
| fSaveAllProperties | BOOL | in | オブジェクトがすべてのプロパティを保存すべきか (TRUE)、既定値から変更されたプロパティのみを保存すべきか (FALSE) を示すフラグ。 |
解説(Remarks)
呼び出し側は、オブジェクトにすべてのプロパティを保存させることも、変更されたプロパティのみを保存させることもできます。
このインターフェイスを実装するオブジェクトはインターフェイスの全機能をサポートしなければならないため、E_NOTIMPL は有効な戻りコードではありません。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IPersistPropertyBag "{37D84F60-42CB-11CE-8135-00AA004BB851}"
#usecom global IPersistPropertyBag IID_IPersistPropertyBag "{}"
#comfunc global IPersistPropertyBag_InitNew 4
#comfunc global IPersistPropertyBag_Load 5 sptr,sptr
#comfunc global IPersistPropertyBag_Save 6 sptr,int,int
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。