3

我对 C# 和 windows 编程相当陌生,我正在尝试在 USB HID 设备之间建立通信。我使用“SetupDiGetDevicexxxxxx”成功获取了设备路径,并使用“CreateFile()”获取了 Handle。下面是我的代码。

public const uint FILE_SHARE_READ = 0x00000001;
public const uint FILE_SHARE_WRITE = 0x00000002;
public const int OPEN_EXISTING = 3;
public const uint GENERIC_READ = 0x80000000;
public const uint GENERIC_WRITE = 0x40000000;
CreateFile(string Devicepath)
{
    HidHandle = CreateFile(Devicepath, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0);                     
}

获取设备句柄信息后,我正在调用写入文件函数,如下所示。

Result = WriteFile(HidHandle, outputReportBuffer[], outputReportBuffer.Length, NumberOfBytesWritten, 0);     

Outputbuffer 是长度为 8 的字节数组。由于某种原因,我无法写入 USB HID 设备。“结果”始终为零。任何帮助表示赞赏。另外,谁能告诉我如何验证它HidHandle是否有效。当我运行该程序时,我得到它作为“1124”。

我确实关注了关于此类问题的上一篇文章:无法使用 writefile() 与 USB HID 设备成功通信,但没有帮助。

下面是创建文件和写入文件的两种方法。

[DllImport("kernel32.dll", SetLastError = true)]
private static extern int CreateFile(string lpFileName, uint dwDesiredAccess, uint dwShareMode, uint lpSecurityAttributes, uint dwCreationDisposition, uint dwFlagsAndAttributes, uint hTemplateFile );    

[DllImport("kernel32.dll")]
static public extern bool WriteFile(int hFile,  byte lpBuffer, int nNumberOfBytesToWrite,  int lpNumberOfBytesWritten, int lpOverlapped)  
4

2 回答 2

1

您可能必须使用 USB 库,例如这个

于 2012-10-01T20:35:59.050 回答
0

我确信您使用如此低级的 Win32 函数是有原因的,但我建议您是否只想在某处写入文件,只需使用 .net 中的 File 类。

如果您只想写入字节,那么最简单的方法之一是使用 File.WriteAllBytes() 方法。

http://msdn.microsoft.com/en-us/library/system.io.file.writeallbytes.aspx

于 2012-10-01T13:16:38.313 回答