ICreateDeviceAccessAsync
COM公式ドキュメント
ICreateDeviceAccessAsync インターフェイスは、CreateDeviceAccessInstance の呼び出しから返されます。
メソッド 4
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
Cancel メソッドは、進行中の非同期操作のキャンセルを試みます。
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
操作が正常にキャンセルされた場合、GetResult メソッドの呼び出しが発生します。
アプリケーションはいつでも Cancel を呼び出すことができます。操作が既にクローズまたは完了している場合、この呼び出しは何の効果もありません。
Wait メソッドは、進行中の非同期バインド操作が完了するまで、指定した時間だけ待機します。
| timeout | DWORD | in | 待機呼び出しのタイムアウト値 (ミリ秒単位)。操作が完了するまで呼び出し元を待機させたい場合は INFINITE を使用します。 |
戻り値
このメソッドは、次の値に加えて標準の戻り値をサポートします。
| 戻り値 | 説明 |
|---|---|
| 待機は成功し、操作が完了しました。 | |
| 操作が完了する前に待機がタイムアウトしました。 | |
| このメソッドが呼び出された時点で、操作は既にクローズされていました。 |
Close メソッドは、非同期操作が完了し結果を取得した後のクリーンアップを実行します。
戻り値
このメソッドは、次の値に加えて標準の戻り値をサポートします。
| 戻り値 | 説明 |
|---|---|
| プロパティ値が正常に取得されました。 | |
| 操作が完了していません。 |
解説(Remarks)
バインドが成功している場合、このメソッドは GetResult メソッドが返すインターフェイスを無効化しません。
基になるオブジェクトが削除される際にリソースはクリーンアップされるため、このメソッドの呼び出しは厳密には必須ではありません。ただし、呼び出すことで非同期バインドに関連付けられたリソースをシステムが解放できます。そのため、結果を取得した後に Close を呼び出すことを推奨します。
CreateDeviceAccessInstance 関数の呼び出しで指定されたデバイスインターフェイスにバインドされた IDeviceIoControl オブジェクトを取得します。
| riid | GUID* | in | 呼び出し元が取得しようとしているデバイスアクセスインターフェイスの種類を示すインターフェイス識別子。この識別子に指定できる有効な値は IID_IDeviceIoControl のみです。 |
| deviceAccess | void** | out | バインドが成功した場合、CreateDeviceAccessInstance への最初の呼び出しで指定された型のインターフェイスが格納されます。 |
戻り値
このメソッドは、次の値に加えて標準の戻り値をサポートします。
| 戻り値 | 説明 |
|---|---|
| バインドに成功しました。 | |
| 非同期操作が有効な状態ではありませんでした。バインド操作がまだ進行中であるか、まだ開始されていません。 |
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_ICreateDeviceAccessAsync "{3474628F-683D-42D2-ABCB-DB018C6503BC}" #usecom global ICreateDeviceAccessAsync IID_ICreateDeviceAccessAsync "{}" #comfunc global ICreateDeviceAccessAsync_Cancel 3 #comfunc global ICreateDeviceAccessAsync_Wait 4 int #comfunc global ICreateDeviceAccessAsync_Close 5 #comfunc global ICreateDeviceAccessAsync_GetResult 6 var,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_ICreateDeviceAccessAsync "{3474628F-683D-42D2-ABCB-DB018C6503BC}" #usecom global ICreateDeviceAccessAsync IID_ICreateDeviceAccessAsync "{}" #comfunc global ICreateDeviceAccessAsync_Cancel 3 #comfunc global ICreateDeviceAccessAsync_Wait 4 int #comfunc global ICreateDeviceAccessAsync_Close 5 #comfunc global ICreateDeviceAccessAsync_GetResult 6 sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。