IPortableDeviceServiceMethods
COM公式ドキュメント
サービス上のメソッドを呼び出す、またはその呼び出しをキャンセルします。
メソッド 3
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
メソッドを同期的に呼び出します。
| Method | GUID* | in | 呼び出すメソッド。 |
| pParameters | IPortableDeviceValues* | in | 呼び出すメソッドのパラメーターを格納した IPortableDeviceValues インターフェイスへのポインター。メソッドがパラメーターを持たない場合は NULL を指定します。 |
| ppResults | IPortableDeviceValues** | inout | メソッドの結果を受け取る IPortableDeviceValues インターフェイスへのポインターのアドレス。メソッドの結果を無視する場合は NULL を指定します。 |
戻り値
メソッドが成功した場合は S_OK を返します。それ以外の HRESULT 値は呼び出しが失敗したことを示します。
解説(Remarks)
このメソッドの呼び出しは同期的であり、メソッドが完了するまで戻りません。実行時間の長いメソッドの場合は、代わりに InvokeAsync メソッドを呼び出してください。
例
このメソッドの使用例については、Invoking Service Methods を参照してください。
メソッドを非同期的に呼び出します。
| Method | GUID* | in | 呼び出すメソッド。 |
| pParameters | IPortableDeviceValues* | in | 呼び出すメソッドのパラメーターを格納した IPortableDeviceValues インターフェイスへのポインター。メソッドがパラメーターを持たない場合は NULL を指定します。 |
| pCallback | IPortableDeviceServiceMethodCallback* | in | メソッドの結果を受け取る、アプリケーションが用意した IPortableDeviceServiceMethodCallback コールバックオブジェクトへのポインター。メソッドの結果を無視する場合は NULL を指定します。 |
戻り値
メソッドが成功した場合は S_OK を返します。それ以外の HRESULT 値は呼び出しが失敗したことを示します。
解説(Remarks)
複数のメソッドを呼び出す場合、クライアントは呼び出しごとに IPortableDeviceServiceMethodCallback インターフェイスの個別のインスタンスを作成し、InvokeAsync メソッドに渡す前にそのインスタンスオブジェクトにコンテキストを保存できます。こうすることで、OnComplete メソッドが呼び出された際に、どのメソッド操作であるかを識別できます。呼び出しごとに一意のオブジェクトを使用することで、Cancel メソッドによる特定の操作を対象としたキャンセルも可能になります。
例
このメソッドの使用例については、Invoking Service Methods Asynchronously を参照してください。
保留中のメソッド呼び出しをキャンセルします。
| pCallback | IPortableDeviceServiceMethodCallback* | in | メソッド呼び出しをキャンセルする対象のコールバックオブジェクトへのポインター。保留中のすべてのメソッド呼び出しをキャンセルする場合は NULL を指定します。 |
戻り値
メソッドが成功した場合は S_OK を返します。それ以外の HRESULT 値は呼び出しが失敗したことを示します。
解説(Remarks)
コールバックオブジェクトはメソッド呼び出しを識別します。同じコールバックオブジェクトを InvokeAsync メソッドの複数の呼び出しで再利用した場合、それらの呼び出しから生じるすべてのメソッド呼び出しがキャンセルされます。
特定のメソッド呼び出しのみを対象としたキャンセルを可能にするには、IPortableDeviceServiceMethodCallback インターフェイスの一意のインスタンスを InvokeAsync メソッドに渡してください。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IPortableDeviceServiceMethods "{E20333C9-FD34-412D-A381-CC6F2D820DF7}" #usecom global IPortableDeviceServiceMethods IID_IPortableDeviceServiceMethods "{}" #comfunc global IPortableDeviceServiceMethods_Invoke 3 var,sptr,sptr #comfunc global IPortableDeviceServiceMethods_InvokeAsync 4 var,sptr,sptr #comfunc global IPortableDeviceServiceMethods_Cancel 5 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IPortableDeviceServiceMethods "{E20333C9-FD34-412D-A381-CC6F2D820DF7}" #usecom global IPortableDeviceServiceMethods IID_IPortableDeviceServiceMethods "{}" #comfunc global IPortableDeviceServiceMethods_Invoke 3 sptr,sptr,sptr #comfunc global IPortableDeviceServiceMethods_InvokeAsync 4 sptr,sptr,sptr #comfunc global IPortableDeviceServiceMethods_Cancel 5 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。