创建父窗口的 DLL 插件无法正确处理消息

我正在创建一个插件框架,我的应用程序在其中加载一系列插件 DLL,然后创建一个新窗口并将这个新窗口的句柄传递给插件。然后,插件可以使用此句柄创建自己的 GUI。

一切似乎都运行良好。唯一的问题是,当我在插件小部件(例如编辑框)上按 TAB 时,它不会跳转到另一个小部件。我发现一些 Windows 消息通过了,而另一些则没有。 WM_KEYDOWN 传递给其他键,因为我可以在编辑框上输入,但此消息不处理 TAB 键。

希望有人指点一下。

我将 Borland VCL 与 CBuilder 结合使用,但我认为我可以使用 WIN32 下的任何框架来创建这些插件,因为它们永远不知道它们的父窗口是如何创建的。

请先 登录 后评论

2 个回答

Michael

DLL 有自己的 TApplication 对象。

提供统一的密钥处理。当 DLL 加载时。 将 DLL::TApplication 分配给 EXE::TApplication 请务必在退出时执行相反的操作。

--

迈克尔

请先 登录 后评论
Lars Truijens

我相信您的每个 dll 和 exe 中都有不同的 VCL 实例。 dll 中的类与 exe 中的类不同,即使它们的名称相同。它们之间也不共享全局变量(应用程序、屏幕)。内存也不是,因为它们都有自己的内存管理器。

解决办法是让dll和exe共享VCL库和内存管理器。我不是 BCB 开发人员,而是 Delphi 开发人员。在 Delphi 中,我们只使用 rtl 和 vcl 作为运行时包。也许你可以做 BCB 等价物。

请先 登录 后评论