在采用现有的单体 C++Builder VCL 应用程序并将其拆分为 exe + DLL 时,我遇到了 TApplication 的问题。
DLL 项目和 exe 项目启用了以下选项,因此它们都应该共享内存管理器和 VCL 库:
- 与动态 RTL 链接
- 与 Delphi 运行时库链接
- 与运行时包链接
据我了解,内存分配和 VCL 组件操作等问题需要这些选项才能跨 DLL 边界工作。
事情大部分都在工作。但是,全局 TApplication 实例显然是从其中一个 DLL 中初始化的,而不是从 exe 中初始化的,这会产生一些不需要的结果:
- System::IsLibrary 被错误地设置为 true。
- 应用程序-> 图标未设置。
- 应用程序-> 句柄未设置。
- 因为没有设置Application->Handle,所以出现了其他各种问题:快捷键不起作用,线程同步有问题等等。
我可以通过设置 Application->Icon->Handle 并从 WinMain 调用 Application->CreateHandle 来解决这些问题,但我不确定这是正确的解决方案(特别是因为文档说“不要调用 CreateHandle”)。
在共享 VCL 组件的同时将 C++Builder VCL 应用程序拆分为 DLL 的正确方法是什么?