Win32 API 日本語リファレンス
ホームSystem.Search › ICondition

ICondition

COM
IID0fc988d4-c935-4b97-a973-46282ea175c8継承元IPersistStream自前メソッド開始 vtbl8

公式ドキュメント

検索条件に関する情報を取得するためのメソッドを提供します。

解説(Remarks)

Windows 7 より前では、このインターフェイスは structuredquery.h と structuredquery.idl でのみ宣言されていました。Windows 7 では、このインターフェイスは structuredquerycondition.idl と structuredquerycondition.h でも定義されています。

StructuredQuerySample では、コンソールから行を読み取り、システムスキーマを使用して解析し、その結果得られる条件ツリーを表示する方法を示しています。

メソッド 7

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 8 HRESULT GetConditionType(CONDITION_TYPE* pNodeType)

この検索条件ノードの条件型を取得します。これにより、そのノードが論理 AND、OR、NOT のいずれであるか、またはリーフノードであるかが識別されます。

pNodeTypeCONDITION_TYPE*outこのノードの CONDITION_TYPE 列挙値を受け取ります。

戻り値

型: HRESULT

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

StructuredQuerySample では、コンソールから行を読み取り、システムスキーマを使用して解析し、その結果得られる条件ツリーを表示する方法を示しています。

vtbl 9 HRESULT GetSubConditions(GUID* riid, void** ppv)

検索条件ノードのサブ条件のコレクションと、そのコレクションを列挙するためのインターフェイスの IID を取得します。

riidGUID*in列挙用インターフェイスとして指定する IID。IID_IEnumUnknown、IID_IEnumVARIANT、または (否定条件の場合) IID_ICondition のいずれかです。
ppvvoid**out0 個以上の ICondition オブジェクトのコレクションを受け取ります。各オブジェクトはこの条件ノードのサブ条件です。riid が IID_ICondition で、かつこれが否定条件である場合、このパラメーターは単一のサブ条件を受け取ります。

戻り値

型: HRESULT

成功した場合は S_OK を返します。これがリーフノードである場合は E_FAIL を、それ以外の場合はエラー値を返します。

解説(Remarks)

riid パラメーターには、IEnumUnknown または IEnumVARIANT インターフェイスの GUID を指定する必要があります。否定ノードの場合は IID_ICondition を指定します。

サブ条件が否定ノードである場合、ppv には要素が 1 つの列挙が設定されます。

ノードが論理積 (conjunction) または論理和 (disjunction) のノードである場合、ppv にはサブ条件の列挙が設定されます。

vtbl 10 HRESULT GetComparisonInfo(LPWSTR* ppszPropertyName, CONDITION_OPERATION* pcop, PROPVARIANT* ppropvar)

リーフ検索条件ノードからプロパティ名、演算、値を取得します。(ICondition.GetComparisonInfo)

ppszPropertyNameLPWSTR*outoptionalリーフ条件のプロパティ名を Unicode 文字列として受け取ります。
pcopCONDITION_OPERATION*outoptionalリーフ条件の演算を CONDITION_OPERATION 列挙値として受け取ります。
ppropvarPROPVARIANT*outoptionalリーフ条件の値を PROPVARIANT として受け取ります。

戻り値

型: HRESULT

成功した場合は S_OK を返します。これがリーフノードでない場合は E_FAIL を、それ以外の場合はエラー値を返します。

解説(Remarks)

3 つのパラメーターは、いずれか、またはすべてを NULL にできます。

vtbl 11 HRESULT GetValueType(LPWSTR* ppszValueTypeName)

検索条件ノードの値のセマンティック型を取得します。

ppszValueTypeNameLPWSTR*out値のセマンティック型を表す Unicode 文字列へのポインター、または NULL を受け取ります。

戻り値

型: HRESULT

成功した場合は S_OK を返します。これがリーフノードでない場合は E_FAIL を、それ以外の場合はエラー値を返します。

vtbl 12 HRESULT GetValueNormalization(LPWSTR* ppszNormalization)

検索条件ノードの、文字正規化された値を取得します。

ppszNormalizationLPWSTR*out値の Unicode 文字列表現へのポインターを受け取ります。

戻り値

型: HRESULT

成功した場合は S_OK を返します。これがリーフノードでない場合は E_FAIL を、それ以外の場合はエラー値を返します。

解説(Remarks)

Windows 7 以降では、リーフノードの値が VT_EMPTY である場合、ppwszNormalization は空の文字列を指します。値が VT_LPWSTRVT_BSTRVT_LPSTR などの文字列である場合、ppwszNormalization にはその値を文字正規化した形式が設定されます。それ以外の場合、ppwszNormalization には値の何らかの文字正規化された文字列表現が設定されます。

vtbl 13 HRESULT GetInputTerms(IRichChunk** ppPropertyTerm, IRichChunk** ppOperationTerm, IRichChunk** ppValueTerm)

リーフノードの場合、ICondition::GetInputTerms は、検索条件ノードのプロパティ、演算、値が入力文字列のどの部分 (範囲) から生成されたかに関する情報を取得します。

ppPropertyTermIRichChunk**outoptionalリーフノードのプロパティが入力文字列のどの部分から生成されたかを判別できる場合、その情報を提供する IRichChunk インターフェイスへのポインターを受け取ります。判別できない場合、このパラメーターには NULL が設定されます。
ppOperationTermIRichChunk**outoptionalリーフノードの演算が入力文字列のどの部分から生成されたかを判別できる場合、その情報を提供する IRichChunk インターフェイスへのポインターを受け取ります。判別できない場合、このパラメーターには NULL が設定されます。
ppValueTermIRichChunk**outoptionalリーフノードの値が入力文字列のどの部分から生成されたかを判別できる場合、その情報を提供する IRichChunk インターフェイスへのポインターを受け取ります。判別できない場合、このパラメーターには NULL が設定されます。

戻り値

型: HRESULT

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

パラメーター ppPropertyTermppOperationTermppValueTerm は、いずれか、またはすべてを NULL にできます。

このメソッドで取得される各 IRichChunk オブジェクトは、入力文字列内のトークンの範囲を表します。この範囲のトークンは、入力文字列のうちプロパティ、演算、または値を生成した部分文字列を示します。IRichChunkPROPVARIANT 出力パラメーターは使用されません。

vtbl 14 HRESULT Clone(ICondition** ppc)

この ICondition オブジェクトのディープコピーを作成します。

ppcICondition**outこの ICondition のクローンへのポインターを受け取ります。

戻り値

型: HRESULT

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

ICondition を変更するためのメソッドは存在しないため、このメソッドが必要になる場面はほとんどありません。多くの場合、ICondition に対して IUnknown::QueryInterface メソッドを呼び出し、同じオブジェクトへの参照を追加で取得すれば十分です。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
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 指定が可能。