【发布时间】:2013-04-24 22:11:00
【问题描述】:
在将现有的单体 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 来解决这些问题,但我不确定这是正确的解决方案(尤其是因为 the docs 说“不要调用创建句柄”)。
在共享 VCL 组件的同时将 C++Builder VCL 应用程序拆分为 DLL 的正确方法是什么?
【问题讨论】:
标签: dll c++builder vcl