ITfPropertyStore
COM公式ドキュメント
ITfPropertyStore インターフェイスはテキストサービスが実装し、TSF マネージャーが静的でないプロパティ値を取得するために使用します。このインターフェイスのインスタンスは ITfProperty::SetValueStore に渡されます。
メソッド 9
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
ITfPropertyStore::GetType メソッド
| pguid | GUID* | out | プロパティ識別子を受け取る GUID 値へのポインター。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| pguid が無効です。 | |
| 原因不明のエラーが発生しました。 |
ITfPropertyStore::GetDataType メソッド
| pdwReserved | DWORD* | out | データ型を受け取る DWORD 値へのポインター。このパラメーターは予約されており、0 を設定する必要があります。 |
戻り値
このメソッドは、成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
ITfPropertyStore::GetData メソッド
| pvarValue | VARIANT* | out | プロパティのデータを受け取る VARIANT 値へのポインター。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| pvarValue が無効です。 | |
| 原因不明のエラーが発生しました。 |
ITfPropertyStore::OnTextUpdated メソッド
| dwFlags | DWORD | in | テキストの変更に関する追加情報を示すフラグのセットを格納します。0 または次の値を指定できます。
| ||||
| pRangeNew | ITfRange* | in | 変更されたテキストの範囲(レンジ)を保持する ITfRange インターフェイスへのポインター。 | ||||
| pfAccept | BOOL* | out | プロパティストアを保持すべきかどうかを示す値を受け取る BOOL 変数へのポインター。プロパティストアを保持する場合は 0 以外の値を、破棄する場合は 0 を受け取ります。プロパティストアが破棄される場合、TSF マネージャーはプロパティ値を VT_EMPTY に設定し、プロパティストアを解放します。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 |
解説(Remarks)
このメソッドが S_OK 以外の値を返した場合、プロパティストアは破棄されます。
ITfPropertyStore::Shrink メソッド
| pRangeNew | ITfRange* | in | 切り詰められた範囲(レンジ)を保持する ITfRange インターフェイスへのポインター。 |
| pfFree | BOOL* | out | プロパティストアを保持すべきかどうかを示す値を受け取る BOOL 変数へのポインター。プロパティストアを保持する場合は 0 以外の値を、破棄する場合は 0 を受け取ります。プロパティストアが破棄される場合、TSF マネージャーはプロパティ値を VT_EMPTY に設定し、プロパティストアを解放します。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 |
解説(Remarks)
このメソッドが S_OK 以外の値を返した場合、プロパティストアは破棄されます。
ITfPropertyStore::Divide メソッド
| pRangeThis | ITfRange* | in | このプロパティストアが今後カバーする範囲(レンジ)を保持する ITfRange オブジェクトへのポインター。これはコンテキストの先頭に最も近いテキスト範囲になります。 |
| pRangeNew | ITfRange* | in | 新しいプロパティストアがカバーする範囲(レンジ)を保持する ITfRange オブジェクトへのポインター。これはコンテキストの末尾に最も近いテキスト範囲になります。 |
| ppPropStore | ITfPropertyStore** | out | pRangeNew で指定された範囲をカバーする新しいプロパティストアオブジェクトを受け取る ITfPropertyStore インターフェイスポインターへのポインター。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 |
解説(Remarks)
このメソッドは pRangeNew をカバーする新しいプロパティストアオブジェクトを作成し、そのオブジェクトへのポインターを ppPropStore で返します。新しいプロパティストアが返されない場合、元のプロパティストアは破棄され、両方の範囲のプロパティストアは空に設定されます。
このメソッドが S_OK 以外の値を返した場合、元のプロパティストアは破棄されます。
ITfPropertyStore::Clone メソッド
| pPropStore | ITfPropertyStore** | out | 新しいプロパティストアオブジェクトを受け取る ITfPropertyStore インターフェイスポインターへのポインター。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| メモリの割り当てに失敗しました。 |
解説(Remarks)
このメソッドは新しいプロパティストアオブジェクトを作成し、元のプロパティストアオブジェクトとまったく同じ複製として動作するように初期化します。新しいオブジェクトは元のオブジェクトから完全に独立している必要があります。
ITfPropertyStore::GetPropertyRangeCreator メソッド
| pclsid | GUID* | out | ITfCreatePropertyStore を実装する、登録済みテキストサービスのクラス識別子を受け取る CLSID へのポインター。プロパティストアの永続化がサポートされていない場合、このパラメーターには CLSID_NULL を返すことができます。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 |
解説(Remarks)
プロパティストアを逆シリアル化する際、TSF マネージャーはこの CLSID のオブジェクトを作成し、そこから ITfCreatePropertyStore インターフェイスポインターを取得します。次にマネージャーは、その ITfCreatePropertyStore オブジェクトを使用してプロパティストアオブジェクトを作成します。
ITfPropertyStore::Serialize メソッド
| pStream | IStream* | in | プロパティストアのデータの書き込み先となる IStream オブジェクトへのポインター。 |
| pcb | DWORD* | out | ストリームに書き込まれたバイト数を受け取る ULONG 値へのポインター。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 1 つ以上のパラメーターが無効です。 |
解説(Remarks)
このメソッドは、ストリームへの書き込みを行う前にストリームの挿入位置を移動してはなりません。また、書き込んだデータの末尾に挿入位置を残しておく必要があります。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_ITfPropertyStore "{6834B120-88CB-11D2-BF45-00105A2799B5}" #usecom global ITfPropertyStore IID_ITfPropertyStore "{}" #comfunc global ITfPropertyStore_GetType 3 var #comfunc global ITfPropertyStore_GetDataType 4 var #comfunc global ITfPropertyStore_GetData 5 var #comfunc global ITfPropertyStore_OnTextUpdated 6 int,sptr,var #comfunc global ITfPropertyStore_Shrink 7 sptr,var #comfunc global ITfPropertyStore_Divide 8 sptr,sptr,sptr #comfunc global ITfPropertyStore_Clone 9 sptr #comfunc global ITfPropertyStore_GetPropertyRangeCreator 10 var #comfunc global ITfPropertyStore_Serialize 11 sptr,var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_ITfPropertyStore "{6834B120-88CB-11D2-BF45-00105A2799B5}" #usecom global ITfPropertyStore IID_ITfPropertyStore "{}" #comfunc global ITfPropertyStore_GetType 3 sptr #comfunc global ITfPropertyStore_GetDataType 4 sptr #comfunc global ITfPropertyStore_GetData 5 sptr #comfunc global ITfPropertyStore_OnTextUpdated 6 int,sptr,sptr #comfunc global ITfPropertyStore_Shrink 7 sptr,sptr #comfunc global ITfPropertyStore_Divide 8 sptr,sptr,sptr #comfunc global ITfPropertyStore_Clone 9 sptr #comfunc global ITfPropertyStore_GetPropertyRangeCreator 10 sptr #comfunc global ITfPropertyStore_Serialize 11 sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。