0

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

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

尽管在运行应用程序时工作正常,但此异常有点令人讨厌,因为它在启动期间会与 Delphi GUI 本身混淆(显示异常对话框,单击确定后部分 GUI 丢失)。

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

是否有对此的修复或设置以防止 Delphi 在设计时运行构造函数?

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

提前致谢/汤姆

4

1 回答 1

0

经过一些试验和错误后,我通过从表单设计器中删除组件并TJvHidDeviceControllerClass手动将方法绑定添加到代码中的类来解决问题。

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

于 2021-08-08T13:53:32.417 回答