我对 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的struct
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 被执行时,它什么也不做。我没有收到任何错误,但是在测试时,它显示通信从未建立并且不成功。如果有人可以分享任何知识或提供任何资源来帮助我,我将不胜感激。感谢您的阅读。
问候。