在使用现有的单片C ++ Builder VCL应用程序并将其拆分为exe + DLL时,我遇到了TApplication的问题。
DLL项目和exe项目启用了以下选项,因此它们应该共享内存管理器和VCL库:
根据我的理解,内存分配和VCL组件操作等问题需要这些选项才能跨DLL边界工作。
事情大部分都在发挥作用。但是,全局TApplication实例显然是从其中一个DLL中初始化的,而不是来自exe内部,有几个不需要的结果:
我可以通过设置Application-> Icon-> Handle并从WinMain调用Application-> CreateHandle来解决这些问题,但我不确定这是否是正确的解决方案(特别是自the docs以来说“不要调用CreateHandle”。)。
在共享VCL组件的同时将C ++ Builder VCL应用程序拆分为DLL的正确方法是什么?
答案 0 :(得分:3)
您应该创建自己的运行时包而不是普通的DLL。 Package是一种特殊类型的DLL,具有内置的RTL / VCL支持。
答案 1 :(得分:-1)
我们通过使用延迟加载Dll解决了问题(可以在exe项目c ++链接器属性中找到)。
更多信息在这里: Delay Loading DLLs