ITextStoreACPServices
COM公式ドキュメント
ITextStoreACPServices インターフェイスは TSF マネージャーによって実装され、ACP ベースのアプリケーションにさまざまなサービスを提供します。
メソッド 4
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
ITextStoreACPServices::Serialize メソッド
| pProp | ITfProperty* | in | シリアル化するプロパティを識別する ITfProperty インターフェイスへのポインター。 |
| pRange | ITfRange* | in | プロパティの取得元となる範囲 (レンジ) を識別する ITfRange インターフェイスへのポインター。 |
| pHdr | TF_PERSISTENT_PROPERTY_HEADER_ACP* | out | プロパティのヘッダーデータを受け取る TF_PERSISTENT_PROPERTY_HEADER_ACP 構造体へのポインター。 |
| pStream | IStream* | in | TSF マネージャーがプロパティデータを書き込む IStream オブジェクトへのポインター。 |
戻り値
解説(Remarks)
pHdr に格納されるプロパティヘッダーデータはすべてのプロパティに共通のものであり、pStream に書き込まれるデータとともに保存する必要があります。プロパティデータを復元するには、この 2 つのデータの組を ITextStoreACPServices::Unserialize に渡す必要があります。
アプリケーションは、次の手順を実行することでドキュメント全体のすべてのプロパティを保存できます。
- ITfContext::EnumProperties を使用してすべてのプロパティを列挙する。
- 各プロパティ内で、ITfReadOnlyProperty::EnumRanges を使用して範囲 (レンジ) を列挙する。
- 現在のプロパティと範囲を ITextStoreACPServices::Serialize に渡す。
- pHdr に格納されたデータをファイルに書き込む。
- pStream に追加されたデータをファイルに書き込む。
ITextStoreACPServices::Unserialize メソッド
| pProp | ITfProperty* | in | プロパティデータを受け取る ITfProperty オブジェクトへのポインター。 |
| pHdr | TF_PERSISTENT_PROPERTY_HEADER_ACP* | in | プロパティのヘッダーデータを格納した TF_PERSISTENT_PROPERTY_HEADER_ACP 構造体へのポインター。 |
| pStream | IStream* | in | プロパティデータを格納した IStream オブジェクトへのポインター。pLoader が NULL でない場合、このパラメーターは NULL にできます。pLoader が NULL でない場合、このパラメーターは無視されます。 |
| pLoader | ITfPersistentPropertyLoaderACP* | in | TSF マネージャーがプロパティデータの取得に使用する ITfPersistentPropertyLoaderACP オブジェクトへのポインター。pStream が NULL でない場合、このパラメーターは NULL にできます。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| プロパティデータは非同期に取得されます。 | |
| 同期的な読み取り専用ロックを取得できません。 | |
| 不特定のエラーが発生しました。 |
解説(Remarks)
pLoader ではなく pStream を指定した場合、プロパティデータは Unserialize の呼び出し中に pStream から読み取られます。pStream ではなく pLoader を指定した場合、プロパティデータは pLoader から非同期に読み取られます。プロパティデータが大きい場合、pStream を使用すると長い遅延が発生することがあります。
このメソッドの呼び出し中、アプリケーションは同期的な読み取り専用ロックを付与できる状態でなければなりません。
ITextStoreACPServices::ForceLoadProperty メソッド
| pProp | ITfProperty* | in | 読み込むプロパティを指定する ITfProperty オブジェクトへのポインター。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| メモリ割り当てエラーが発生しました。 | |
| 不特定のエラーが発生しました。 |
解説(Remarks)
このメソッドを呼び出す際、アプリケーションは同期的な読み取り専用ロックを付与できる状態でなければなりません。
ITextStoreACPServices::CreateRange メソッド
| acpStart | INT | in | 範囲 (レンジ) の開始位置を格納します。 |
| acpEnd | INT | in | 範囲 (レンジ) の終了位置を格納します。 |
| ppRange | ITfRangeACP** | out | 範囲オブジェクトを受け取る ITfRangeACP インターフェイスポインターへのポインター。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| ppRange が無効です。 | |
| 不特定のエラーが発生しました。 |
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_ITextStoreACPServices "{AA80E901-2021-11D2-93E0-0060B067B86E}" #usecom global ITextStoreACPServices IID_ITextStoreACPServices "{}" #comfunc global ITextStoreACPServices_Serialize 3 sptr,sptr,var,sptr #comfunc global ITextStoreACPServices_Unserialize 4 sptr,var,sptr,sptr #comfunc global ITextStoreACPServices_ForceLoadProperty 5 sptr #comfunc global ITextStoreACPServices_CreateRange 6 int,int,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_ITextStoreACPServices "{AA80E901-2021-11D2-93E0-0060B067B86E}" #usecom global ITextStoreACPServices IID_ITextStoreACPServices "{}" #comfunc global ITextStoreACPServices_Serialize 3 sptr,sptr,sptr,sptr #comfunc global ITextStoreACPServices_Unserialize 4 sptr,sptr,sptr,sptr #comfunc global ITextStoreACPServices_ForceLoadProperty 5 sptr #comfunc global ITextStoreACPServices_CreateRange 6 int,int,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。