<Return[WXYZ]><Top>
WriteFileEx |
Declare Function Api_WriteFileEx& Lib "kernel32" Alias "WriteFileEx" (ByVal hFile&, lpBuffer As Any, ByVal nNumberOfBytesToWrite&, lpOverlapped As OVERLAPPED, ByVal lpCompletionRoutine&) |
Declare Function WriteFileEx Lib "kernel32" Alias "WriteFileEx" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToWrite As Long, lpOverlapped As OVERLAPPED, ByVal lpCompletionRoutine As Long) As Long |
|
ファイルにデータを非同期的に書き込む。WriteFile 関数は同期と非同期の両方の操作を想定して設計されているが、WriteFileEx 関数は非同期の操作だけを想定して設計されている。書き込み操作が完了または取り消された時点で、呼び出し側スレッドがアラート可能な待機状態になっている場合、WriteFileEx 関数は指定の完了ルーチンを呼び出して、完了のステータスを非同期で報告する。 |
|
パラメータ
ならない。また、GENERIC_WRITE アクセス権も備えていなければならない。
かの関数が返したソケットのハンドルを指定する。 accept どちらかの関数が返したソケットのハンドルを指定する。メールスロット、名前付きパイプ、ディスクファイルに対する非同期書き込み
操作はサポートしていない。
び出し側はこのバッファを使ってはならない。
この構造体は、非同期(オーバーラップ)ファイル書き込み操作の際に使われるデータを提供する。 なければならない。OVERLAPPED 構造体の Offset と OffsetHigh の各メンバを設定して、バイトオフセットを指定する。バイトオフセットを
サポートしないファイルでは、Offset と OffsetHigh の各メンバは無視される。 で、このメンバをで自由に使ってかまわない。WriteFileEx 関数は、lpCompletionRoutine パラメータで指定された完了ルーチンを呼び出す
(または呼び出しの指示をキューに入れる)ことによって、書き込み操作の完了を通知するので、イベントのハンドルは必要ない。
べきではない。
まになっている間に、スコープから外れてしまう変数を指定しないよう注意する。
の完了ルーチンが呼び出される。 作が完了した時点で、呼び出し側スレッドがアラート可能な待機状態でブロックされている(その先への進行を妨害されている、つまり待機 している)場合、システムは、lpCompletionRoutine パラメータで指定した完了ルーチンを呼び出し、待機状態が完了し、WriteFileEx 関
数の戻り値は、WAIT_IO_COMPLETION になる。 システムは *lpCompletionRoutine パラメータで指定された完了ルーチンの呼び出し命令をキューに追加し、呼び出し側スレッドがアラート可
能な待機状態になるのを待つ。 て、いくつかの条件が「成功」しているだけで、把握するべき他の条件がエラーになっていないかどうかをチェックする。たとえば、 WriteFileEx を呼び出してバッファオーバーフローが発生した場合、WriteFileEx は成功を示す、0 以外の値(TRUE)を返す。しかし、 GetLastError は ERROR_MORE_DATA を返して、オーバーフローが発生したことを報告する。WriteFileEx 関数が成功し、待機するべ
き条件が存在しない場合、GetLastError は ERROR_SUCCESS(操作は成功して完了)を返す。
満たさなければならない。
断するには、GetDiskFreeSpace 関数を呼び出す。
バイト、1,024 バイト、2,048 バイトの読み書きはできるが、335 バイト、981 バイト、7,171 バイトなどの読み書きはできない。 らない。バッファをセクタ整列させる 1 つの方法は、 関数を使ってバッファを割り当てることである。VirtualAlloc 関数が割り当てるメモリ は、システムのページサイズの整数倍のアドレスに整列されている。ページサイズとボリュームのセクタサイズは両方とも 2 のべき乗なの
で、システムのページサイズの整数倍に整列されたメモリは、ボリュームのセクタサイズの整数倍のアドレスにも整列される。
書き込み操作を行うよう指定した範囲がロック済みの領域と重なっていると、この関数は失敗する。
る。書き込み操作が完了するまでは、アプリケーションは出力バッファの読み取り、書き込み、再割り当て、解放を行ってはならない。
GetLastError 関数は、ERROR_INVALID_USER_BUFFER または ERROR_NOT_ENOUGH_MEMORY
を返すことがある。
プロセスが発行した操作だけを取り消す。取り消された各 I/O 操作は、ERROR_OPERATION_ABORTED エラーを返して終了する。 試行するかどうかを尋ねるメッセージボックスを表示する。このメッセージボックスの表示を回避するには、
SEM_NOOPENFILEERRORBOX を指定して 関数を呼び出す。 WriteFile 関数を使って非同期通信を行うことができる。 |