ICondition
COM公式ドキュメント
検索条件に関する情報を取得するためのメソッドを提供します。
解説(Remarks)
Windows 7 より前では、このインターフェイスは structuredquery.h と structuredquery.idl でのみ宣言されていました。Windows 7 では、このインターフェイスは structuredquerycondition.idl と structuredquerycondition.h でも定義されています。
StructuredQuerySample では、コンソールから行を読み取り、システムスキーマを使用して解析し、その結果得られる条件ツリーを表示する方法を示しています。
メソッド 7
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
この検索条件ノードの条件型を取得します。これにより、そのノードが論理 AND、OR、NOT のいずれであるか、またはリーフノードであるかが識別されます。
| pNodeType | CONDITION_TYPE* | out | このノードの CONDITION_TYPE 列挙値を受け取ります。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
StructuredQuerySample では、コンソールから行を読み取り、システムスキーマを使用して解析し、その結果得られる条件ツリーを表示する方法を示しています。
検索条件ノードのサブ条件のコレクションと、そのコレクションを列挙するためのインターフェイスの IID を取得します。
| riid | GUID* | in | 列挙用インターフェイスとして指定する IID。IID_IEnumUnknown、IID_IEnumVARIANT、または (否定条件の場合) IID_ICondition のいずれかです。 |
| ppv | void** | out | 0 個以上の ICondition オブジェクトのコレクションを受け取ります。各オブジェクトはこの条件ノードのサブ条件です。riid が IID_ICondition で、かつこれが否定条件である場合、このパラメーターは単一のサブ条件を受け取ります。 |
戻り値
解説(Remarks)
riid パラメーターには、IEnumUnknown または IEnumVARIANT インターフェイスの GUID を指定する必要があります。否定ノードの場合は IID_ICondition を指定します。
サブ条件が否定ノードである場合、ppv には要素が 1 つの列挙が設定されます。
ノードが論理積 (conjunction) または論理和 (disjunction) のノードである場合、ppv にはサブ条件の列挙が設定されます。
リーフ検索条件ノードからプロパティ名、演算、値を取得します。(ICondition.GetComparisonInfo)
| ppszPropertyName | LPWSTR* | outoptional | リーフ条件のプロパティ名を Unicode 文字列として受け取ります。 |
| pcop | CONDITION_OPERATION* | outoptional | リーフ条件の演算を CONDITION_OPERATION 列挙値として受け取ります。 |
| ppropvar | PROPVARIANT* | outoptional | リーフ条件の値を PROPVARIANT として受け取ります。 |
戻り値
解説(Remarks)
3 つのパラメーターは、いずれか、またはすべてを NULL にできます。
検索条件ノードの値のセマンティック型を取得します。
| ppszValueTypeName | LPWSTR* | out | 値のセマンティック型を表す Unicode 文字列へのポインター、または NULL を受け取ります。 |
戻り値
検索条件ノードの、文字正規化された値を取得します。
| ppszNormalization | LPWSTR* | out | 値の Unicode 文字列表現へのポインターを受け取ります。 |
戻り値
解説(Remarks)
Windows 7 以降では、リーフノードの値が VT_EMPTY である場合、ppwszNormalization は空の文字列を指します。値が VT_LPWSTR、VT_BSTR、VT_LPSTR などの文字列である場合、ppwszNormalization にはその値を文字正規化した形式が設定されます。それ以外の場合、ppwszNormalization には値の何らかの文字正規化された文字列表現が設定されます。
リーフノードの場合、ICondition::GetInputTerms は、検索条件ノードのプロパティ、演算、値が入力文字列のどの部分 (範囲) から生成されたかに関する情報を取得します。
| ppPropertyTerm | IRichChunk** | outoptional | リーフノードのプロパティが入力文字列のどの部分から生成されたかを判別できる場合、その情報を提供する IRichChunk インターフェイスへのポインターを受け取ります。判別できない場合、このパラメーターには NULL が設定されます。 |
| ppOperationTerm | IRichChunk** | outoptional | リーフノードの演算が入力文字列のどの部分から生成されたかを判別できる場合、その情報を提供する IRichChunk インターフェイスへのポインターを受け取ります。判別できない場合、このパラメーターには NULL が設定されます。 |
| ppValueTerm | IRichChunk** | outoptional | リーフノードの値が入力文字列のどの部分から生成されたかを判別できる場合、その情報を提供する IRichChunk インターフェイスへのポインターを受け取ります。判別できない場合、このパラメーターには NULL が設定されます。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
パラメーター ppPropertyTerm、ppOperationTerm、ppValueTerm は、いずれか、またはすべてを NULL にできます。
このメソッドで取得される各 IRichChunk オブジェクトは、入力文字列内のトークンの範囲を表します。この範囲のトークンは、入力文字列のうちプロパティ、演算、または値を生成した部分文字列を示します。IRichChunk の PROPVARIANT 出力パラメーターは使用されません。
この ICondition オブジェクトのディープコピーを作成します。
| ppc | ICondition** | out | この ICondition のクローンへのポインターを受け取ります。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
ICondition を変更するためのメソッドは存在しないため、このメソッドが必要になる場面はほとんどありません。多くの場合、ICondition に対して IUnknown::QueryInterface メソッドを呼び出し、同じオブジェクトへの参照を追加で取得すれば十分です。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_ICondition "{0FC988D4-C935-4B97-A973-46282EA175C8}" #usecom global ICondition IID_ICondition "{}" #comfunc global ICondition_GetConditionType 8 var #comfunc global ICondition_GetSubConditions 9 var,sptr #comfunc global ICondition_GetComparisonInfo 10 var,var,var #comfunc global ICondition_GetValueType 11 var #comfunc global ICondition_GetValueNormalization 12 var #comfunc global ICondition_GetInputTerms 13 sptr,sptr,sptr #comfunc global ICondition_Clone 14 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_ICondition "{0FC988D4-C935-4B97-A973-46282EA175C8}" #usecom global ICondition IID_ICondition "{}" #comfunc global ICondition_GetConditionType 8 sptr #comfunc global ICondition_GetSubConditions 9 sptr,sptr #comfunc global ICondition_GetComparisonInfo 10 sptr,sptr,sptr #comfunc global ICondition_GetValueType 11 sptr #comfunc global ICondition_GetValueNormalization 12 sptr #comfunc global ICondition_GetInputTerms 13 sptr,sptr,sptr #comfunc global ICondition_Clone 14 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。