我有一个在 delphi 7 上使用HID 控制器的应用程序,但现在我需要在 Delphi 2010 上使用它(许可证问题),但我在这个 delphi 2010 中发现了这个 HIDController 的一些兼容性问题。这个库是 JEDI 项目的一部分。
我注意到人们在 Delphi 2010 和 Win7 中使用这个库(JvHidDeviceController 组件)的一些问题。也许遇到同样问题的人可以帮助我。我现在有可能我只是不知道怎么做。
我有一个在 delphi 7 上使用HID 控制器的应用程序,但现在我需要在 Delphi 2010 上使用它(许可证问题),但我在这个 delphi 2010 中发现了这个 HIDController 的一些兼容性问题。这个库是 JEDI 项目的一部分。
我注意到人们在 Delphi 2010 和 Win7 中使用这个库(JvHidDeviceController 组件)的一些问题。也许遇到同样问题的人可以帮助我。我现在有可能我只是不知道怎么做。
这是 D2010 的工作代码:使用来自此站点的包:HIDController DPK
并将 JvHidControllerClass.pas 替换为来自此站点的版本:修改后的源文件
主要问题在于字符串和 AnsiString 声明,所以这个文件解决了这个不兼容问题。
PS 使用帖子中文件的压缩版本。
显然“设备无法打开”问题(Natalia)也与 unicode 字符有关。答案 1 中指向的新版本 HIDController 并没有解决这个问题。
解决方法:将“ PAnsiChar ”中的TJvHIDPnPInfo.Create(单位JvHIDController.pas)的最后一个参数的类型改为“PChar”。不要忘记更改“调用”例程的类型转换。
ps答案1中“修改后的源文件”和“压缩版本”的链接已失效。
在 Delphi 2010 中,所有声明为字符串的变量都是 unicode 类型(宽字符串)。将组件从早期版本(Delphi 7)移植到较新版本时,始终检查所有声明为字符串和 pchar 的变量。在较新的版本中,需要将此变量声明为 AnsiString 和 PAnsyChar,这很可能会解决您的问题。当然,您必须确保调用任何 dll 函数以调用正确的 _W(调用具有宽字符串参数的函数时)或使用 AnsiString 时的 _A。但是要提到的另一件事是检查 HID 的文档以查看接受哪些类型的参数并在较新的 delphi 版本中正确使用它们。我从头开始编写了我的 hid 控制器(类似的),当时还没有,当然当我将它移植到 Delphi2010 时,不同的字符串类型是我的主要问题。当我编写 WinUsbController 以使用 WinUSB 驱动程序时,情况类似。必须阅读手册 (MSDN)、签入标头 (.h) 并阅读 delphi 帮助(用于字符串)以匹配正确的数据类型。