GetOverlappedResult函数返回指定文件(名称为管道或通信设备)上的重叠操作的结果。
Windows 95:此函数仅适用于串行设备或使用DeviceIoControl功能打开的文件。
BOOL GetOverlappedResult(
HANDLE 【HFILE】, | //文件,管道或通讯设备的句柄 |
LPOVERLAPPED 【lpOverlapped的】, | //重叠结构的地址 |
LPDWORD 【lpNumberOfBytesTransferred】, | //实际字节数的地址 |
BOOL 【BWAIT】 | // wait flag |
); |
参数
【HFILE】
标识文件,命名管道或通信设备。这是通过调用ReadFile WriteFile,ConnectNamedPipe,TransactNamedPipe,DeviceIoControl或WaitCommEvent函数启动重叠操作时指定的句柄。
【lpOverlapped的】
指向重叠操作启动时指定的OVERLAPPED结构。
【lpNumberOfBytesTransferred】
指向一个32位变量,它接收通过读或写操作实际传输的字节数。对于TransactNamedPipe操作,这是从管道读取的字节数。对于DeviceIoControl操作,这是设备驱动程序返回的输出数据的字节数。对于ConnectNamedPipe或WaitCommEvent操作,此值未定义。
【BWAIT】
指定函数是否等待待完成的重叠操作。如果为TRUE,该函数在操作完成之前不会返回。如果FALSE和操作仍待处理,函数返回FALSE,并且GetLastError函数返回ERROR_IO_INCOMPLETE。
返回值
如果函数成功,返回值不为零。
如果函数失败,返回值为零。要获取扩展错误信息,请调用GetLastError.
备注
GetOverlappedResult功能报告的结果是指定的句柄的最后一次重叠操作,其中指定的OVERLAPPED结构被提供给该操作,并且操作的结果正在等待。当启动操作的功能返回FALSE,并且GetLastError函数返回ERROR_IO_PENDING时,指示挂起的操作。当I / O操作挂起时,启动操作的功能将OVERLAPPED结构的活动成员重置为非信号状态。然后当等待操作完成时,系统将事件对象设置为信号状态。
如果【BWAIT】参数为TRUE,则GetOverlappedResult通过等待事件对象处于信号状态来确定挂起操作是否已完成。
如果OVERLAPPED结构的活动成员为NULL,系统将使用【HFILE】句柄的状态在操作完成时发出信号。不建议使用文件,命名管道或通讯设备手柄。使用事件对象更安全,因为在同一个文件,名为管道或通信设备上执行多个同时重叠操作时可能会发生混淆。在这种情况下,没有办法知道哪个操作导致了对象的状态信号。
在OVERLAPPED结构中指定手动重置事件对象。如果使用自动复位事件对象,则在开始重叠操作和调用GetOverlappedResult之间的间隔内,不得在任何其他等待操作中指定事件句柄。例如,事件对象有时在其中一个等待功能中指定,等待操作完成。当wait函数返回时,系统会将自动复位事件的状态设置为非信号状态,并将【BWAIT】参数设置为TRUE的后续调用GetOverlappedResult将导致该函数无限期被阻止。
也可以看看
CancelIo, ConnectNamedPipe, CreateEvent, DeviceIoControl, GetLastError, OVERLAPPED, ReadFile, TransactNamedPipe, WaitCommEvent, WriteFile