使用writefile()无法与USB HID设备成功通信

时间:2012-07-27 16:09:05

标签: c# usb hid

我对C#和Windows编程都很陌生,我正在尝试在Windows xp pc上建立USB HID设备和用c#编写的应用程序之间的通信。我已成功获取设备路径,并已使用此路径在设备上建立有效的句柄:

IntPtr drive = CreateFile(devicePath, GENERIC_READ | GENERIC_WRITE,
               FILE_SHARE_READ | FILE_SHARE_WRITE, IntPtr.Zero,
               OPEN_EXISTING, FILE_FLAG_DELETE_ON_CLOSE, IntPtr.Zero);

这被证明是一个有效的句柄,在测试时产生一个正整数。创建句柄后,我调用'HidD_GetPreparsedData'和'HidP_GetCaps',它产生一个先前导入的结构(HIDP_CAPS),它存储与所连接设备相关的特定数据。接下来,我尝试调用writefile():

bool success = WriteFile(drive, ref outputReportBuffer, 
               caps.OutputReportByteLength, ref numberOfBytesWritten, 
               IntPtr.Zero); 

drive:设备的句柄

outputReportBuffer:要写入的字节数组[65]

caps.OutputReportByteLength:要写入的字节数,caps是HIDP_CAPS的结构

numberOfBytesWritten:硬编码为0

IntPtr.Zero:我读过的所有内容都像我一样传递了最后一个参数。在'writefile'的形式参数中,最后一个参数被列为'IntPtr ipOverlapped',但我无法弄清楚它是什么,除了它应该以某种形式传递0

如何导入WriteFile:

[DllImport("kernel32.dll", SetLastError = true)]
public static extern bool WriteFile(IntPtr hFile, 
ref byte[] lpBuffer, 
uint nNumberOfBytesToWrite,
ref uint lpNumberOfBytesWritten, 
IntPtr ipOverlapped);

执行writefile时,它什么都不做。我没有得到任何错误,但经过测试,它表明通信从未建立,并且没有成功。如果有人可以分享任何知识或提供任何资源来帮助我真的很感激。谢谢你的阅读。

问候。

1 个答案:

答案 0 :(得分:0)

删除ref声明中的WriteFile

虽然http://www.pinvoke.net/是P / Invoke声明的一个很好的资源,但它是一个wiki风格的网站,并且许多声明都是错误的(通常它们不适用于x64机器)。