IPersistSerializedPropStorage
COM公式ドキュメント
シリアライズされたプロパティストレージデータを後で使用できるように永続化し、永続化されたデータを新しいプロパティストアインスタンスへ復元するためのメソッドを公開します。(IPersistSerializedPropStorage)
解説(Remarks)
プロパティストアとの間で値を読み書きするには、IPropertyStore インターフェースを使用します。
使用する場面
PSCreateMemoryPropertyStore を呼び出して作成されるインメモリプロパティストアは、このインターフェースの実装を提供します。シリアライズされたプロパティストレージデータを永続化または復元したい場合に、この実装を使用してください。実装する場面
IPersistSerializedPropStorage は独自実装を目的としたものではありません。インメモリプロパティストアに関連付けられた、システム提供の実装を使用してください。メソッド 3
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
プロパティストアオブジェクトを読み取り専用状態と読み取り/書き込み状態の間で切り替えます。
| flags | INT | in | flags パラメーターは、プロパティストレージの動作に関するオプションを設定するために、次のいずれかの値を取ります。 FPSPS_DEFAULT (0x00000000)Windows 7 以降。プロパティストアオブジェクトは読み取り/書き込みです。 FPSPS_READONLY (0x00000001)プロパティストアオブジェクトは読み取り専用です。 FPSPS_TREAT_NEW_VALUES_AS_DIRTY (0x00000002)Windows 8 で導入。IPropertyStore::SetValue メソッドを通じてプロパティストアに追加された新しいプロパティ値により、IPersistStream::IsDirty メソッドが S_OK を返すようになります。このフラグが設定されていない場合、プロパティストアへの新しいプロパティ値の追加は、IPersistStream::IsDirty が返す値に影響しません。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
既定の設定は読み取り/書き込みです。IPersistSerializedPropStorage::SetFlags はいつでも呼び出すことができ、プロパティストアの読み取り専用状態と読み取り/書き込み状態を切り替えます。
Windows 7 より前のバージョンの Windows では、呼び出し側はリテラルのゼロ値を flags パラメーターに直接代入して読み取り/書き込み状態を設定できました。Windows 7 以降では、代わりに FPSPS_DEFAULT フラグ値を使用してください。
指定されたシリアライズ済みプロパティストレージデータからプロパティストアインスタンスを初期化します。
| psps | PCUSERIALIZEDPROPSTORAGE | in | プロパティストアの初期化に使用される、シリアライズ済みプロパティストアデータへのポインター。 |
| cb | DWORD | in | psps が指すシリアライズ済みプロパティストレージデータに含まれるバイト数。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
SERIALIZEDPROPSTORAGE 型は Propsys.h において不完全型として定義されています。これは BYTE 値の配列として扱う必要があり、返されるデータの形式は規定されていません。SERIALIZEDPROPSTORAGE 構造体として格納されるデータは、IPersistSerializedPropStorage::GetPropertyStorage の呼び出しによって、直接、またはそのメソッドの呼び出しで生成された永続化データを通じて取得されたものでなければなりません。
プロパティストアインスタンスからシリアライズ済みプロパティストレージデータを取得します。
| ppsps | SERIALIZEDPROPSTORAGE** | out | このメソッドが返るとき、シリアライズ済みプロパティストレージデータへのポインターのアドレスが格納されます。 |
| pcb | DWORD* | out | このメソッドが返るとき、ppsps が指すシリアライズ済みプロパティストレージデータに含まれるバイト数が格納されます。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
SERIALIZEDPROPSTORAGE 型は Propsys.h において不完全型として定義されています。これは BYTE 値の配列として扱う必要があり、返されるデータの形式は規定されていません。SERIALIZEDPROPSTORAGE 構造体の内容はディスクやその他のストレージへの永続化に適しており、IPersistSerializedPropStorage::SetPropertyStorage を通じて別のプロパティストアを初期化するために使用できます。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IPersistSerializedPropStorage "{E318AD57-0AA0-450F-ACA5-6FAB7103D917}" #usecom global IPersistSerializedPropStorage IID_IPersistSerializedPropStorage "{}" #comfunc global IPersistSerializedPropStorage_SetFlags 3 int #comfunc global IPersistSerializedPropStorage_SetPropertyStorage 4 sptr,int #comfunc global IPersistSerializedPropStorage_GetPropertyStorage 5 var,var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IPersistSerializedPropStorage "{E318AD57-0AA0-450F-ACA5-6FAB7103D917}" #usecom global IPersistSerializedPropStorage IID_IPersistSerializedPropStorage "{}" #comfunc global IPersistSerializedPropStorage_SetFlags 3 int #comfunc global IPersistSerializedPropStorage_SetPropertyStorage 4 sptr,int #comfunc global IPersistSerializedPropStorage_GetPropertyStorage 5 sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。