LPOVERLAPPED_COMPLETION_ROUTINE コールバック関数 (minwinbase.h)
ReadFileEx 関数と WriteFileEx 関数で使用される、アプリケーション定義のコールバック関数。 非同期の入出力 (I/O) 操作が完了または取り消され、呼び出し元のスレッドが警告可能な状態 (SleepEx、MsgWaitForMultipleObjectsEx、WaitForSingleObjectEx、または WaitForMultipleObjectsEx 関数を使用して fAlertable パラメーターが TRUE に設定されている場合) に呼び出されます。
LPOVERLAPPED_COMPLETION_ROUTINE型は、このコールバック関数へのポインターを定義します。 FileIOCompletionRoutine は、アプリケーション定義関数名のプレースホルダーです。
構文
LPOVERLAPPED_COMPLETION_ROUTINE LpoverlappedCompletionRoutine;
void LpoverlappedCompletionRoutine(
[in] DWORD dwErrorCode,
[in] DWORD dwNumberOfBytesTransfered,
[in, out] LPOVERLAPPED lpOverlapped
)
{...}
パラメーター
[in] dwErrorCode
I/O 完了状態。 このパラメーターには、 システム エラー コードのいずれかを指定できます。
[in] dwNumberOfBytesTransfered
転送されたバイト数。 エラーが発生した場合、このパラメーターは 0 です。
[in, out] lpOverlapped
非同期 I/O 関数によって指定された OVERLAPPED 構造体へのポインター。
システムは、完了ルーチンが呼び出された後に OVERLAPPED 構造体を使用しないため、完了ルーチンは、重複した構造体で使用されるメモリの割り当てを解除できます。
戻り値
なし
解説
操作が正常に完了した場合、または操作が警告で完了した場合、非同期操作の戻り値は 0 (ERROR_SUCCESS) です。 I/O 操作が正常に完了したかどうかを確認するには、dwErrorCode が 0 であることをチェックし、GetOverlappedResult を呼び出してから、GetLastError を呼び出します。 たとえば、バッファーが ReadFileEx の呼び出しからすべてのデータを受信するのに十分な大きさではなかった場合、dwErrorCode は 0 に設定され、GetOverlappedResult は失敗し、GetLastError はERROR_MORE_DATAを返します。
この関数から戻って、別の保留中の I/O 完了ルーチンを呼び出すことができます。 警告可能なスレッドの待機が完了する前に、すべての待機完了ルーチンが呼び出され、戻りコード がWAIT_IO_COMPLETION。 システムは、待機中の完了ルーチンを任意の順序で呼び出す場合があります。 I/O 関数が完了した順序で呼び出される場合と呼び出されない場合があります。
システムが完了ルーチンを呼び出すたびに、アプリケーションのスタックの一部が使用されます。 完了ルーチンで非同期 I/O が追加され、アラート可能な待機が行われると、スタックが大きくなる可能性があります。
詳細については、「 非同期プロシージャ呼び出し」を参照してください。
例
コード例については、「 完了ルーチンを使用した名前付きパイプ サーバー」を参照してください。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows XP (デスクトップ アプリのみ) |
サポートされている最小のサーバー | Windows Server 2003 (デスクトップ アプリのみ) |
対象プラットフォーム | Windows |
ヘッダー | minwinbase.h (Windows.h を含む) |