ISchemaProvider
COM公式ドキュメント
参照可能なスキーマリポジトリを提供します。
メソッド 7
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
読み込まれたスキーマ内の各エンティティごとに 1 つずつ、IEntity オブジェクトの列挙を取得します。
| riid | GUID* | in | 結果として必要な IID。IID_IEnumUnknown または IID_IEnumVARIANT のいずれかです。 |
| pEntities | void** | out | エンティティの列挙へのポインターを受け取ります。呼び出し元のアプリケーションは、IUnknown::Release メソッドを呼び出して解放する必要があります。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
読み込まれたスキーマのルートエンティティを取得します。
| pRootEntity | IEntity** | out | ルートエンティティへのポインターを受け取ります。呼び出し元のアプリケーションは、IUnknown::Release メソッドを呼び出して解放する必要があります。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
読み込まれたスキーマから、名前を指定してエンティティを取得します。
| pszEntityName | LPWSTR | in | 要求するエンティティの名前。 |
| pEntity | IEntity** | out | 要求したエンティティへのポインターのアドレスを受け取ります。呼び出し元のアプリケーションは、IUnknown::Release メソッドを呼び出してエンティティを解放する必要があります。指定した名前のエンティティが存在しない場合、このパラメーターには NULL が設定されます。 |
戻り値
読み込まれたスキーマのグローバルな IMetaData オブジェクトの列挙を取得します。
| riid | GUID* | in | 結果として必要な IID。IID_IEnumUnknown または IID_IEnumVARIANT のいずれかです。 |
| pMetaData | void** | out | IMetaData オブジェクトの列挙へのポインターを受け取ります。呼び出し元のアプリケーションは、IUnknown::Release メソッドを呼び出して解放する必要があります。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
現在読み込まれているスキーマを、指定したロケール向けにローカライズします。
| lcid | DWORD | in | ローカライズ先のロケール。 |
| pSchemaLocalizerSupport | ISchemaLocalizerSupport* | in | ISchemaLocalizerSupport オブジェクトへのポインター。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
このメソッドを呼び出す前は、読み込まれているスキーマは通常、%SYSTEMROOT%\System32\StructuredQuerySchema.bin にあるようなローカライズされていないスキーマである必要があります。このメソッドは、pSchemaLocalizerSupport パラメーターで指定したオブジェクトを使用して、読み込まれたスキーマを、指定したロケールでクエリを解析するのに適した状態にします。ローカライズされたスキーマは、ISchemaProvider::SaveBinary メソッドを呼び出してスキーマバイナリとして保存できます。
ほとんどのアプリケーションでは、このメソッドを明示的に使用するのではなく、CreateLoadedParser を使用して、ローカライズされたスキーマが読み込まれたクエリパーサーを取得してください。
読み込まれたスキーマを、指定したパスにスキーマバイナリとして保存します。
| pszSchemaBinaryPath | LPWSTR | in | スキーマバイナリの保存先となる完全修飾パスを含む、null で終わる Unicode 文字列へのポインター。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
pszSchemaBinaryPath で指定した場所に既存のファイルがある場合は上書きされます。
トークン化された文字列から指定した型の名前付きエンティティを検索し、そのエンティティの値と、エンティティの値が占めるトークン数を返します。
| pEntity | IEntity* | in | 検索する名前付きエンティティの型を示す IEntity オブジェクトへのポインター。 |
| pszInputString | LPWSTR | in | 名前付きエンティティのキーワードを検索する対象の入力文字列。 |
| pTokenCollection | ITokenCollection* | in | pszInputString パラメーターの文字列をトークン化した結果へのポインター。 |
| cTokensBegin | DWORD | in | 検索を開始する pTokenCollection 内のトークンの位置 (0 から始まる)。 |
| pcTokensLength | DWORD* | out | 見つかった名前付きエンティティのキーワードが占めるトークン数へのポインターを受け取ります。 |
| ppszValue | LPWSTR* | out | 見つかった名前付きエンティティの値を表す Unicode 文字列へのポインターを受け取ります。呼び出し元は CoTaskMemFree を呼び出して文字列を解放する必要があります。pEntity の GetNamedEntity メソッドを呼び出し、このパラメーターで受け取った文字列を渡すことで、INamedEntity オブジェクトを取得できます。 |
戻り値
型: HRESULT
cTokensBegin の位置から始まるトークン列が、指定した (エンティティ) 型の名前付きエンティティを表す場合は S_OK を返します。そのようなトークン列が存在しない場合は S_FALSE を返します。
解説(Remarks)
このメソッドは、スキーマ内でキーワードとして定義された名前付きエンティティのみを検索し、IConditionGenerator オブジェクトによって認識される名前付きエンティティは検索しません。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_ISchemaProvider "{8CF89BCB-394C-49B2-AE28-A59DD4ED7F68}" #usecom global ISchemaProvider IID_ISchemaProvider "{}" #comfunc global ISchemaProvider_Entities 3 var,sptr #comfunc global ISchemaProvider_RootEntity 4 sptr #comfunc global ISchemaProvider_GetEntity 5 wstr,sptr #comfunc global ISchemaProvider_MetaData 6 var,sptr #comfunc global ISchemaProvider_Localize 7 int,sptr #comfunc global ISchemaProvider_SaveBinary 8 wstr #comfunc global ISchemaProvider_LookupAuthoredNamedEntity 9 sptr,wstr,sptr,int,var,var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_ISchemaProvider "{8CF89BCB-394C-49B2-AE28-A59DD4ED7F68}" #usecom global ISchemaProvider IID_ISchemaProvider "{}" #comfunc global ISchemaProvider_Entities 3 sptr,sptr #comfunc global ISchemaProvider_RootEntity 4 sptr #comfunc global ISchemaProvider_GetEntity 5 wstr,sptr #comfunc global ISchemaProvider_MetaData 6 sptr,sptr #comfunc global ISchemaProvider_Localize 7 int,sptr #comfunc global ISchemaProvider_SaveBinary 8 wstr #comfunc global ISchemaProvider_LookupAuthoredNamedEntity 9 sptr,wstr,sptr,int,sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。