从通信资源中读取

时间:2011-07-12 08:17:38

标签: c readfile device createfile

我想从连接到COM端口的设备读取一些数据。

  • HANDLE handle = CreateFileW (L"\\\\.\\COM3", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);

    为我提供了有效的HANDLE,然后通过GetCommStateSetCommState进行配置。

  • OVERLAPPED ol = {0};

    char buffer[1024];

    ol.Offset = 0;

    ol.OffsetHigh = 0;

    ReadFileEx (handle, buffer, 1, &ol, NULL);

    问题是,此调用未成功,GetLastError()返回87(ERROR_INVALID_PARAMETER)。

我可以尝试从设备读取什么内容?

2 个答案:

答案 0 :(得分:1)

ReadFileEx文档说明了

  

ReadFileEx函数忽略OVERLAPPED结构的hEvent   会员。申请可以自由使用该成员   在ReadFileEx调用的上下文中。 ReadFileEx表示完成   通过调用或排队调用完成来进行读取操作   例程由lpCompletionRoutine指向,所以它不需要   事件处理。

因此虽然它也说完成例程是可选的,但可能需要它。另请注意您链接到的页面底部的社区评论 - MS可能已通过考虑NULL lpCompletionRoutine错误来修复该崩溃。但是,我还没有对其进行测试以验证。

如果您没有使用完成例程,则可以使用普通的ReadFile进行重叠操作。

答案 1 :(得分:1)

ReadFileEx的MS实施中也存在一个错误。尽管文档明确指出不应该完全回复BOOL返回结果,并且还应检查GetLastError(),但实现无法清除任何预先存在的错误。在致电SetLastError(ERROR_SUCCESS)之前添加ReadFileEx()