OVERLAPPED 構造体 (shobjidl.h)
非同期 (重複) 入出力 (I/O) で使用される情報が含まれます。
構文
typedef struct _OVERLAPPED {
ULONG_PTR Internal;
ULONG_PTR InternalHigh;
union {
struct {
DWORD Offset;
DWORD OffsetHigh;
};
PVOID Pointer;
};
HANDLE hEvent;
} OVERLAPPED, *LPOVERLAPPED;
メンバー
Internal
種類: ULONG_PTR
オペレーティング システムで使用するために予約されています。 システム依存の状態を指定するこのメンバーは、拡張エラー情報をERROR_IO_PENDINGに設定せずに IStreamAsync::OverlappedResult 関数がを返す場合に有効です。
InternalHigh
種類: ULONG_PTR
オペレーティング システムで使用するために予約されています。 転送されるデータの長さを指定するこのメンバーは、 IStreamAsync::OverlappedResult 関数がTRUE を返すときに有効です。
Offset
型: DWORD
転送を開始するファイルの位置。 ファイル位置は、ファイルの開始位置からのバイト オフセットです。 呼び出し元のプロセスは、 IStreamAsync::ReadAsync または IStreamAsync::WriteAsync 関数を呼び出す前に、このメンバー を 設定する必要があります。
OffsetHigh
型: DWORD
転送を開始するファイル位置の上位ワード。
Pointer
種類: PVOID
予約済み。
hEvent
型: handle
操作が完了したときにシグナル状態に設定されたイベントを処理します。 呼び出し元のプロセスでは、重複する関数を呼び出す前に、このメンバーを 0 または有効なイベント ハンドルに設定する必要があります。 イベント オブジェクトを作成するには、 CreateEvent 関数を使用します。 この関数は、デバイスの同時 I/O 要求を同期するために使用できるハンドルを返します。
IStreamAsync::ReadAsync や IStreamAsync::WriteAsync などの関数は、I/O 操作を開始する前に、このハンドルを非署名状態に設定します。 操作が完了すると、ハンドルはシグナル状態に設定されます。
IStreamAsync::OverlappedResult などの関数と待機関数は、自動リセット イベントを非署名状態にリセットします。 したがって、自動リセット イベントが使用されている場合、アプリケーションは操作の完了を待機した後、 IStreamAsync::OverlappedResult を呼び出すと応答を停止できます。
注釈
この構造体は、関数呼び出しで使用される前に、常に 0 に初期化する必要があります。 そうでない場合、関数は失敗し、 ERROR_INVALID_PARAMETERを返す可能性があります。
非同期 I/O 操作を取 り消すには、IStreamAsync::CancelIo 関数を使用します。
一般的な間違いは、前の非同期操作が完了する前に OVERLAPPED 構造体を再利用することです。 要求ごとに個別の構造体を使用します。 データを処理するスレッドごとにイベント オブジェクトを作成します。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows Vista [デスクトップ アプリのみ] |
サポートされている最小のサーバー | Windows Server 2008 [デスクトップ アプリのみ] |
Header | shobjidl.h |