Win32 API 日本語リファレンス
ホームUI.Shell › IOpenSearchSource

IOpenSearchSource

COM
IIDf0ee7333-e6fc-479b-9f25-a860c234a38e継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

カスタムのクライアント側 OpenSearch データソースから検索結果を取得するメソッドを公開します。

解説(Remarks)

実装するタイミング

サーバー側のみのソリューションでは対応できない、次のような場合にこのインターフェイスを実装します。 Windows の OpenSearch プロバイダーと外部データソースの間に位置する、クライアント側の OpenSearch データソースです。

検索コネクタ(.searchconnector-ms ファイル)を用いると、Windows エクスプローラーはクエリパラメーターを付けてお使いの実装を呼び出します。お使いの実装は結果を RSS 形式または Atom 形式で返します。これにより、お使いの実装はカスタム認証 UI を提供し、独自の API を使用してデータソースに接続できます。

メソッド 1

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

vtbl 3 HRESULT GetResults(HWND hwnd, LPWSTR pszQuery, DWORD dwStartIndex, DWORD dwCount, GUID* riid, void** ppv)

OpenSearch データソースから、RSS 形式または Atom 形式で書式設定された検索結果を返します。

hwndHWNDin呼び出し元のウィンドウハンドル。
pszQueryLPWSTRinユーザーが入力したクエリ。このパラメーターは OpenSearch の {searchTerms} パラメーターに相当し、空の場合もあります。
dwStartIndexDWORDin要求される最初の結果のインデックス。OpenSearch の {startIndex} パラメーターに相当します。後述の「解説」を参照してください。
dwCountDWORDin要求される結果の件数。OpenSearch の {count} パラメーターに相当します。
riidGUID*in要求されるインターフェイスの IID。通常は IID_IStream です。
ppvvoid**outRIID で指定された型の、Atom 形式または RSS 形式の結果を含むオブジェクトへのインターフェイスポインター。

戻り値

型: HRESULT

成功した場合は S_OK を、それ以外の場合はエラー値を返します。B_S_ENDOFROWSET は必要に応じて結果の終端を示します。次のエラーは、情報バーに適切なエラーメッセージを表示します。

解説(Remarks)

Windows エクスプローラーは、検索クエリパラメーターを付けてこのメソッドを呼び出します。IOpenSearchSource の実装は、カスタム認証 UI の提供や独自 API を使用したデータソースへの接続など、必要な処理を実行した後に、結果の一部またはすべてを返します。

ページ分割された結果

Web サービスが 1 回の要求で返す結果を一定の件数以内に制限したい場合、このメソッドは一度に結果の 1「ページ」だけを返すことができます。Windows エクスプローラーは、このメソッドを繰り返し呼び出して新しいインデックス番号を指定することで、追加のページの結果を取得できます。結果を返す際、最初の結果は dwStartIndex で要求されたインデックスの結果でなければなりません。

インデックス番号と件数

インデックス番号は、結果ページの最初の結果を識別します。これは OpenSearch の {startIndex} パラメーターに相当します。件数は OpenSearch の {count} パラメーターに相当し、1 ページあたりに返される想定または希望する項目数を識別します。

Web サービスが結果の最初のページで 20 件を返す場合、想定されるページサイズは 20 です。次の 20 件を取得するには、Windows エクスプローラーは dwStartIndex に 21、dwCount に 20 を指定して IOpenSearchSource::GetResults を呼び出します。Web サービスが返す結果ページの項目数が想定されるページサイズより少ない場合、Windows エクスプローラーは結果の最後のページを受信したものとみなし、要求の送信を停止します。

出典・ライセンス: 上記「公式ドキュメント」の内容は 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_IOpenSearchSource "{F0EE7333-E6FC-479B-9F25-A860C234A38E}"
#usecom global IOpenSearchSource IID_IOpenSearchSource "{}"
#comfunc global IOpenSearchSource_GetResults  3 sptr,wstr,int,int,var,sptr
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。