微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么在窗体上拖动组件时 TJvHidDeviceController 会抛出“无法识别设备”?

如何解决为什么在窗体上拖动组件时 TJvHidDeviceController 会抛出“无法识别设备”?

我在 Windows 10 上拥有 Delphi 社区版 10.3 并尝试使用 JEDI (JVCL v3.50) TJvHidDeviceControllerClass (v 1.0.35) 在 VCL 表单应用程序中控制我的 HID 设备. 当我启动 Delphi 并关闭显示一个对话框时,如果加载项目时该组件已经存在于表单上,也会抛出此异常。当使用分配的 OnDeviceCreateError() 事件处理程序运行时,应用程序运行正常,因为我设置调试器让应用程序处理此特定异常,并将 OnDeviceCreateError() 处理程序中的“已处理”布尔值设置为 true。在 Delphi GUI 之外运行时它也能正常工作。

我一直在寻找有关解决此问题的线索,并且看到其他人也遇到了此问题。由于大多数关于此的帖子都很旧,我想知道我是否没有正确版本的库 (https://github.com/project-jedi/jvcl)。 JEDI 库是一周前使用自述页面上的说明从 github 获取的。我的本地仓库是从 master 分支克隆的。我构建并在本地轻松安装。

尽管在运行应用程序时工作正常,但此异常有点麻烦,因为它在启动期间会干扰 Delphi GUI 本身(显示异常对话框,单击“确定”后部分 GUI 丢失)。

我不认为我的代码是这里的罪魁祸首,因为在任何应用程序代码甚至开始执行之前问题就出现了。我怀疑 Delphi 本身在分配 OnDeviceCreateError() 处理程序之前运行组件的构造函数,因此异常会在调色板放置或启动期间一直传播到 GUI。为什么在关闭 Delphi 时显示异常对我来说更难解释。

是否有解决方法或设置可以防止 Delphi 在设计时运行构造函数

我应该在创建表单时创建 TJvHidDeviceControllerClass 实例吗?

提前致谢 /Thom

解决方法

经过反复试验,我解决了这个问题,方法是从表单设计器中删除组件,然后手动添加 TJvHidDeviceControllerClass 和方法绑定到代码中的类。

不应使用默认构造函数,因为它不会在创建时绑定异常处理程序。使用另一个进行绑定。 它现在工作正常,在开始/停止时间没有杂散异常。 手动创建时,请务必在表单关闭时显式释放 TJvHidDeviceControllerClass 对象实例。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。