我目前有一个包含 TForm 后代的 dll,它在调用导出函数时显示。客户端应用程序具有不同的发布周期,因此当 dll 必须更改时,这可以最大限度地减少对它们的不必要更改。这种方法存在众所周知的问题,这些问题源于 dll 和客户端应用程序具有不同的 TApplication 实例,因此我不会进一步详细说明。BPL 是该问题的推荐解决方案,但目前不是一个选项,因为客户端应用程序是在不同版本的 Delphi 中编译的(我希望保持该选项打开,以便在一些非 delphi 应用程序中重用)。
为了避免这些问题,我尝试将 dll 替换为包含自包含Active Form控件的 ocx,该控件可以通过将其拖放到 TOleContainer 中的表单或作为包装控件来显示在客户端应用程序中。
使用文档和一些教程,我创建了一个 ocx 项目、活动表单并注册了它。然后我开始着手将它放入一个测试应用程序中。让控件显示在 TOleContainer 中没有问题,但它不会响应鼠标或键盘操作。我认为这可能是 TOleContainer 的限制,所以我使用“导入组件”导入了 ocx,并将生成的 VCL 组件包装器放到了我的表单上。结果相同。对任何鼠标或键盘操作均无响应。(除了右键单击控件会显示“属性”上下文菜单)
我已经阅读并重新阅读了文档和教程,并没有发现我错过了任何步骤。根据他们的说法,它“有效”。我确定我缺少一些东西。