ホーム › Devices.FunctionDiscovery › IFunctionInstanceQuery
IFunctionInstanceQuery
COM公式ドキュメント
カテゴリとサブカテゴリに基づく関数インスタンスの非同期クエリを実装します。
解説(Remarks)
クエリオブジェクトからデータを取得するには、その前にクライアントプログラムが Execute メソッドを呼び出す必要があります。
メソッド 1
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
vtbl 3 HRESULT Execute(IFunctionInstance** ppIFunctionInstance)
IFunctionDiscovery::CreateInstanceQuery で定義されたクエリを実行します。
| ppIFunctionInstance | IFunctionInstance** | out | 要求された関数インスタンスを受け取る IFunctionInstance インターフェイスポインターへのポインター。 |
戻り値
取り得る戻り値には、以下のものが含まれますが、これらに限定されません。
| 戻り値のコード/値 | 説明 |
|---|---|
| メソッドは正常に完了しました。 | |
| ppIFunctionInstance パラメーターが NULL です。 | |
| この操作の実行に必要なメモリをメソッドが割り当てられません。 | |
| プロバイダーが返す結果は非同期通知を通じて到着します。 | |
|
指定された ID で表される関数インスタンスは、このコンピューター上に存在しません。 |
|
関数インスタンスに対応するキーが別のプロセスによって削除されたため、関数インスタンスを返せませんでした。このエラーは、クエリ処理中にキーが削除された場合にレジストリプロバイダーによって返されます。 |
|
関数インスタンスに対応するキーが見つからなかったため、関数インスタンスを返せませんでした。このエラーは、インスタンスクエリに一致するインスタンスをレジストリプロバイダーが見つけられなかった場合に返されます。 |
事前定義クエリとは、階層化されたカテゴリに対するクエリです。事前定義クエリが実行されると、関数インスタンスを返す各プロバイダーは HRESULT 値も返します。プロバイダーの HRESULT 値は集約され、Execute メソッドが返す値はこの集約結果を反映します。結果は次のように集約されます。
- すべてのプロバイダーが S_OK を返した場合、Execute は S_OK を返します。
- 少なくとも 1 つのプロバイダーが E_PENDING を返し、他のすべてのプロバイダーが S_OK または E_PENDING を返した場合、Execute は E_PENDING を返します。
- すべてのプロバイダーがエラー値(すなわち S_OK でも E_PENDING でもない値)を返した場合、Execute は最後にクエリされたネットワークプロバイダーが返したエラー値を返します。また、クライアントの IFunctionDiscoveryNotification コールバックルーチンが IFunctionDiscovery::CreateInstanceCollectionQuery に指定されていた場合、各プロバイダーに対して OnError 通知が送信されます。各 OnError 通知には、そのプロバイダーが返した HRESULT が含まれます。
- 少なくとも 1 つのプロバイダーがエラー値を返し、他のすべてのプロバイダーが S_OK を返した場合、Execute は S_OK を返します。OnError 通知は上記のとおり送信されます。
- 少なくとも 1 つのプロバイダーがエラー値を返し、少なくとも 1 つのプロバイダーが E_PENDING を返した場合、Execute は E_PENDING を返します。OnError 通知は上記のとおり送信されます。
解説(Remarks)
クエリオブジェクトからデータを取得するには、クライアントプログラムがこのメソッドを呼び出す必要があります。呼び出されると、このメソッドは次の処理を実行します。
- 関数インスタンスを取得します。
- クライアントプログラムの IFunctionDiscoveryNotification コールバックルーチンのアドレスが IFunctionDiscovery::CreateInstanceQuery に指定されている場合、更新通知メカニズムを開始します。
同じクエリオブジェクトに対して Execute が 2 回呼び出された場合、2 番目のクエリが実行される前に最初のクエリが終了されます。
出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IFunctionInstanceQuery "{6242BC6B-90EC-4B37-BB46-E229FD84ED95}"
#usecom global IFunctionInstanceQuery IID_IFunctionInstanceQuery "{}"
#comfunc global IFunctionInstanceQuery_Execute 3 sptr
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。