2014-12-04 154 views
-1

我试图用USB设备communicatate在Windows 7上我发现使用供应商和产品ID我用下面的命令的WriteFile写入USB

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); 
打开设备后,当出现错误代码87失败

然后我做写入到使用该设备

res = WriteFile(dev->device_handle, buf, length, &bytes_written, &ol); 

其中长度为64

我的设备可以读取和在此界面中写入64个字节的数据,这已经在测试林在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

我认为你的“重叠”不打印正确。它有不少成员。不过,这些信息有助于排除“INVALID_HANDLE_VALUE”。 – MSalters 2014-12-04 12:09:05

+0

为什么你认为重叠是259? – 2014-12-04 12:13:43

+0

因为你打印错了。它不是259,因为259是一个整数值,“OVERLAPPED”不是整数类型。 – MSalters 2014-12-04 12:15:10

回答

2

嗯,有5个参数:

  1. dev->device_handle可能是INVALID_HANDLE_VALUE如果CreateFile失败。
  2. buf不应该是NULL
  3. length不能进行检查,因此它不能成为问题。
  4. &bytes_written是相当无意义的(使用GetOverlappedResult)。
  5. &lo必须包含有效的偏移量和事件。而且,所有其他字段都必须清零。

缺乏上下文,我们不能错误的具体参数。我首先检查&bytes_written,因为它是我最明显的嫌疑犯。

+0

感谢您的回复。我做了一些调试日志,并将其作为编辑粘贴在问题中。我有一个条件来检查INVALID_HANDLE_VALUE – 2014-12-04 12:04:42

相关问题