我正在使用TJvHidDeviceController类来检索HID设备信息。我插入了两个HID设备,但我试图创建SP_DEVICE_INTERFACE_DETAIL_DATA_A结构的“DevicePath”,并始终将设备路径设置为“\”。所以我不能打开CreateFile函数。请帮我解决这个问题。我的操作系统win7。 谢谢大家。TJvHidDeviceController“DevicePath”始终显示“”
回答
这是猜测!
有一件事我能想到的是:
TJvHidDeviceController调用Windows API调用不使用一个或W后缀。使用的结构是ANSI版本SP_DEVICE_INTERFACE_DETAIL_DATA_A。现在,如果您使用的是Delphi 2009或更高版本,则该例程将需要SP_DEVICE_INTERFACE_DETAIL_DATA_W。大小是一样的,所以一切都看起来不错。但是存储的字符串将是USC2编码(WideChars)而不是ANSI编码 - >因此,在每个ANSI字符后都会有一个空字节。 TJvHidDeviceController可能会使用类似StrPas的函数将字符数组转换回pascal字符串,因此您只能看到第一个字符。
检查: 在填充结构的函数调用之后设置一个断点,并使用CPU窗口将内容视为内存转储。如果您看到每隔一个字节的ANSI字符和之间的空字节,则可以确认上述情况属实。
解决方案:
- 检查,如果呼叫是使用广泛的变异,并相应地改变结构。
- 检查呼叫是否使用宽变体并改为使用A变体。这可能是最简单的选择。
这不仅仅是猜测。他没有说过他是使用unicode Delphi(2009+)还是使用一些较老的Ansi delphi版本。 –
@Warren:这只是猜测的一部分;-)。 –
大家好,我正在使用Delphi2010。我将后缀“A”更改为“W”。现在它的工作正常。现在获取所有HID设备信息。非常感谢。它帮助我很多。再次感谢...:) –
- 1. 始终显示Highcharts
- 2. 始终显示使用D3js
- 3. .GetChanges始终显示为空
- 4. 平均始终显示3
- 5. UIActivityIndicatorView始终显示
- 6. @ErrorPlace始终得到显示
- 7. FileUpload.HasFile始终显示为false
- 8. 始终显示与iScroll
- 9. Android:始终显示按钮
- 10. 如何始终显示在
- 11. @QueryParam始终显示为空
- 12. C# - DataGridView - 始终显示TopLeftHeaderCell
- 13. Twitter登录始终显示
- 14. UIScrollView指示灯始终显示?
- 15. 始终显示道场提示
- 16. EADemo示例始终显示'No Accessories connected'
- 17. 始终显示4个小数位数
- 18. Mapkit - 始终显示指南针
- 19. 始终显示相同的HTML页面
- 20. 始终显示使用Apache POI
- 21. 设计2.2.3始终显示在
- 22. iOS图表 - 始终显示限制线
- 23. 始终显示时间XX:使用PHP
- 24. momentJS-timezone始终显示UTC时间
- 25. SharePoint EditModePanel始终显示内容
- 26. 如何始终显示滚动条UICollectionView
- 27. UItable标题始终显示滚动时
- 28. 始终显示状态栏和软键
- 29. MediaController始终显示在Android上
- 30. ListView始终显示滚动条内SwipeRefreshLayout
如果以完全管理权限运行应用程序,问题是否仍然存在?您是否使用过较新版本的Delphi,其中Char等于WideChar而不是AnsiChar? –
哪个Delphi版本?哪个Windows版本? –
@Jeroen:在另一个问题user602714说:http://stackoverflow.com/questions/4895179/how-to-programmatically-change-tablet-pc-orientation(我使用Delphi 2010) –