将C ++ Builder应用程序应用并拆分为DLL

时间:2013-04-30 21:26:25

标签: dll c++builder vcl

在使用现有的单片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以来说“不要调用CreateHandle”。)。

在共享VCL组件的同时将C ++ Builder VCL应用程序拆分为DLL的正确方法是什么?

2 个答案:

答案 0 :(得分:3)

您应该创建自己的运行时包而不是普通的DLL。 Package是一种特殊类型的DLL,具有内置的RTL / VCL支持。

答案 1 :(得分:-1)

我们通过使用延迟加载Dll解决了问题(可以在exe项目c ++链接器属性中找到)。

更多信息在这里: Delay Loading DLLs