在Delphi 2010中使用HIDController

3
我有一个应用程序,在Delphi 7上使用HID控制器,但现在需要在Delphi 2010上使用(许可问题),但我发现这个HIDController在Delphi 2010中存在一些兼容性问题。该库是Project JEDI的一部分。
我注意到一些人使用此库(JvHidDeviceController组件)与Delphi 2010和Win7存在问题。也许有人遇到了同样的问题可以帮助我。我知道这是可能的,只是不知道如何解决。

你在 Delphi 2010 和 7 中使用的是同一个版本吗?它们可能不兼容。 - Toon Krijthe
1
“一些兼容性问题”是什么?我们无法从这里看到您的屏幕,并且您没有提出任何可以在此回答的问题。您提到了“相同的问题”,但由于您没有说明问题是什么,因此没有人能够说他们是否遇到了相同的问题。在任何人可能帮助您之前,您需要提供更多的信息。 - Ken White
我只使用“JvHidControllerClass”单元,它适用于Delphi 7和2010..XE。它在HidController.dpk包中,我将其编译并安装到新的IDE中。其中的自述文件显示:“1.0.34引入了几个依赖于Windows版本的方法。”因此,这应该可以告诉您版本号。 - Brian Frost
@Brian Frost,我尝试了这些示例,但是它给了我相同的错误。我按照您说的使用了断点,但我唯一注意到的是HidFileHandle是INVALID_HANDLE_VALUE。我不认为问题是我的设备,因为我可以在另一个库中无问题地使用它。我想这个库代码中有一些Delphi 2010无法识别的代码,但我还没有找到有用的东西。在您的应用程序中使用之前,您是否更改了其中的任何内容?我会继续努力寻找有用的东西!谢谢 :) - Nathalia
由于我的设备不会出现无法读取的问题(或者说不应该有这样的问题)而且也能正常工作,我不知道问题出在哪里! - Nathalia
显示剩余3条评论
3个回答

3
这是适用于D2010的可运行代码: 使用来自此网站的软件包: HIDController DPK

并将JvHidControllerClass.pas替换为来自此网站的版本: 修改后的源文件

主要问题在于字符串和AnsiString声明,因此此文件解决了这种不兼容性。

P.S. 使用本帖子中的压缩版本的文件。


2
显然,“设备无法打开”问题(Natalia)也与Unicode字符有关。在答案1中指向的HIDController的新版本不能解决此问题。
解决方案: 将JvHIDController.pas中的最后一个参数的类型更改为“PAnsiChar”,而不是“PChar”。不要忘记在调用该例程时也更改类型转换。
附注:答案1中的“修改后的源文件”和“压缩版本”的链接已失效。

0
在Delphi 2010中,所有声明为字符串的变量都是Unicode类型(宽字符串)。当从早期版本(Delphi 7)移植组件到新版本时,始终要检查所有声明为字符串和PChar的变量。在新版本中,这些变量需要声明为AnsiString和PAnsyChar,这很可能会解决您的问题。当然,您必须确保如果调用任何dll函数,则调用适当的_W函数(调用带有宽字符串参数的函数)或_A函数(使用AnsiString时)。但是,另一件需要提及的事情是检查HID文档以查看接受的参数类型,并在新的Delphi版本中正确使用它们。当我写我的HID控制器(类似)时,由于不同的字符串类型,移植到Delphi2010时是我的主要问题。当我编写WinUsbController以使用WinUSB驱动程序时也是如此。阅读手册(MSDN),在头文件(.h)中检查并阅读Delphi帮助(有关字符串的内容)以匹配适当的数据类型是必需的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接