我正在尝试使用Windows 7上的USB设备进行通信。在找到使用供应商和产品ID的设备后,我使用以下命令打开它
dev->device_handle = CreateFile( path, (GENERIC_WRITE | GENERIC_READ),
(FILE_SHARE_READ|FILE_SHARE_WRITE),
(LPSECURITY_ATTRIBUTES)NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, NULL);
然后我使用
写入设备res = WriteFile(dev->device_handle, buf, length, &bytes_written, &ol);
长度为64。
我的设备可以在此界面中读取和写入64字节的数据,这已在Linux上测试并在Windows中使用其他工具(我没有该工具的来源)。
WriteFile函数给出错误代码87.这是无效参数。
请有人指出我犯的错误。
P.S。我已经分析了这个问题 WriteFile returning error code 87
我制作了一些调试日志
--------------------------------------------------
Before write call
dev_handle:152
buf:2293463
length:65
bytes_written:0
overlap:0
--------------------------------------------------
--------------------------------------------------
After write call
dev_handle:152
buf:2293463
length:65
bytes_written:0
overlap:259
--------------------------------------------------
Last Error: 87
答案 0 :(得分:2)
嗯,有5个参数:
dev->device_handle
失败,则INVALID_HANDLE_VALUE
可能为CreateFile
。buf
不应该是NULL
length
无法检查,因此不会出现问题。&bytes_written
毫无意义(使用GetOverlappedResult
)。&lo
必须包含有效的偏移和事件。此外,所有其他字段必须归零。缺乏上下文,我们不能对任何特定参数进行错误处理。我先检查一下&bytes_written
,因为这对我来说是最明显的嫌疑。