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

IStreamAsync

COM
IIDfe0b6665-e0ca-49b9-a178-2b5cb48d92a5継承元IStream自前メソッド開始 vtbl14

公式ドキュメント

非同期ストリームに対する入出力(I/O)を管理するためのメソッドを公開します。

メソッド 4

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

vtbl 14 HRESULT ReadAsync(void* pv, DWORD cb, DWORD* pcbRead, OVERLAPPED* lpOverlapped)

ストリームから情報を非同期に読み取ります。たとえば、Shell はファイル項目を非同期に転送する際にこのインターフェイスを実装します。

pvvoid*outこのメソッドが正常に終了すると、長さが cb バイトで、読み取り操作から得られた pcbRead バイトの情報を含むバッファーを返します。
cbDWORDinストリームから読み取るバイト数です。
pcbReadDWORD*outoptionalDWORD 値へのポインターで、このメソッドが正常に終了すると、pv が指すバッファーに実際に読み取られたバイト数を格納します。この値は NULL にできます。
lpOverlappedOVERLAPPED*in非同期読み取り操作で使用される情報を含む OVERLAPPED 構造体へのポインターです。

戻り値

型: HRESULT

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

解説(Remarks)

IStreamAsync::ReadAsync は、入出力(I/O)操作を開始する際に、OVERLAPPED 構造体の hEvent メンバーで指定されたイベントを非シグナル状態にリセットする必要があります。

このメソッドは、パブリックな ReadFile API を薄くラップする形で Shell に実装されています。

vtbl 15 HRESULT WriteAsync(void* lpBuffer, DWORD cb, DWORD* pcbWritten, OVERLAPPED* lpOverlapped)

ストリームに情報を非同期に書き込みます。たとえば、Shell はファイル項目を非同期に転送する際にこのメソッドを実装します。

lpBuffervoid*inストリームに書き込む情報を含む、サイズ cb バイトのバッファーへのポインターです。
cbDWORDinlpBuffer が指すバッファーのサイズ(バイト単位)です。
pcbWrittenDWORD*outoptionalDWORD 値へのポインターで、このメソッドが正常に終了すると、ストリームに実際に書き込まれたバイト数を格納します。この情報が不要な場合、この値は NULL にできます。
lpOverlappedOVERLAPPED*in非同期書き込み操作で使用される情報を含む OVERLAPPED 構造体へのポインターです。

戻り値

型: HRESULT

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

解説(Remarks)

WriteAsync は、入出力(I/O)操作を開始する際に、OVERLAPPED 構造体の hEvent メンバーで指定されたイベントを非シグナル状態にリセットする必要があります。

vtbl 16 HRESULT OverlappedResult(OVERLAPPED* lpOverlapped, DWORD* lpNumberOfBytesTransferred, BOOL bWait)

オーバーラップ操作の結果を取得します。

lpOverlappedOVERLAPPED*inオーバーラップ操作を開始したときに指定された OVERLAPPED 構造体へのポインターです。
lpNumberOfBytesTransferredDWORD*outこのメソッドが返るとき、読み取りまたは書き込み操作によって実際に転送されたバイト数を格納します。
bWaitBOOLinTRUE の場合、操作が完了するまでメソッドは返りません。FALSE で操作が保留中の場合、メソッドは ERROR_IO_INCOMPLETE に相当する HRESULT を返します。

戻り値

型: HRESULT

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

vtbl 17 HRESULT CancelIo()

保留中のすべての入出力(I/O)操作をキャンセル済みとしてマークします。

戻り値

型: HRESULT

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

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