TJvHidDeviceController“DevicePath”始终显示“\”

时间:2011-02-09 05:02:30

标签: delphi delphi-2010 hid

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

1 个答案:

答案 0 :(得分:2)

这是在猜测!

我能想到的一件事是:

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

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

解决方案:

  1. 检查呼叫是否正在使用宽变量并相应地更改结构。
  2. 检查呼叫是否正在使用广泛变体,而是使用A变量。这可能是最简单的选择。