0

我正在使用 TJvHidDeviceController 类来检索 HID 设备信息。我已经插入了两个 HID 设备,但我试图让 SP_DEVICE_INTERFACE_DETAIL_DATA_A 结构的“DevicePath”始终将设备路径设为“\”。所以我无法打开 CreateFile 函数。请帮我解决这个问题。我的操作系统win7。谢谢大家。

4

1 回答 1

2

这是猜的!

我能想到的一件事是:

TJvHidDeviceController 调用 Windows API 调用而不使用 A 或 W 后缀。使用的结构是 SP_DEVICE_INTERFACE_DETAIL_DATA_A,ANSI 版本。现在,如果您使用 Delphi 2009 或更高版本,例程将需要 SP_DEVICE_INTERFACE_DETAIL_DATA_W。大小是一样的,所以一切看起来都很好。但是存储的字符串将是 USC2 编码(WideChars)而不是 ANSI 编码 -> 因此在每个 ANSI 字符之后都会有一个空字节。TJvHidDeviceController 可能使用类似 StrPas 的函数将字符数组转换回帕斯卡字符串,因此,您只能看到第一个字符。

检查:在填充结构的函数调用之后设置断点,并使用 CPU 窗口将内容作为内存转储查看。如果您每隔一个字节就看到 ANSI 字符,并且在它们之间看到空字节,则可以确认上述情况是这种情况。

解决方案:

  1. 检查调用是否使用宽变体并相应地更改结构。
  2. 检查调用是否使用宽变体并改用 A 变体。这可能是最简单的选择。
于 2011-02-09T19:40:14.237 回答