我想从连接到COM端口的设备读取一些数据。
HANDLE handle =
CreateFileW
(L"\\\\.\\COM3", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);
为我提供了有效的HANDLE
,然后通过GetCommState
和SetCommState
进行配置。
OVERLAPPED ol = {0};
char buffer[1024];
ol.Offset = 0;
ol.OffsetHigh = 0;
ReadFileEx
(handle, buffer, 1, &ol, NULL);
问题是,此调用未成功,GetLastError()
返回87(ERROR_INVALID_PARAMETER
)。
我可以尝试从设备读取什么内容?
答案 0 :(得分:1)
ReadFileEx文档说明了
ReadFileEx函数忽略OVERLAPPED结构的hEvent 会员。申请可以自由使用该成员 在ReadFileEx调用的上下文中。 ReadFileEx表示完成 通过调用或排队调用完成来进行读取操作 例程由lpCompletionRoutine指向,所以它不需要 事件处理。
因此虽然它也说完成例程是可选的,但可能需要它。另请注意您链接到的页面底部的社区评论 - MS可能已通过考虑NULL lpCompletionRoutine错误来修复该崩溃。但是,我还没有对其进行测试以验证。
如果您没有使用完成例程,则可以使用普通的ReadFile进行重叠操作。
答案 1 :(得分:1)
ReadFileEx
的MS实施中也存在一个错误。尽管文档明确指出不应该完全回复BOOL
返回结果,并且还应检查GetLastError()
,但实现无法清除任何预先存在的错误。在致电SetLastError(ERROR_SUCCESS)
之前添加ReadFileEx()
。