如何将Delphi解决方案拆分为可重用的运行时包?

时间:2014-06-15 16:38:47

标签: delphi-xe5 bpl

我从Delphi XE5开始,我想将我的应用程序拆分为一个exe和多个可重用的库。这意味着我不想在DLL或运行时包中拆分正在运行的* .exe应用程序。

为了实现这一点,我已经看到在delphi中我们可以创建运行时包,并且我遵循以下步骤:

  1. 我创建了一个新的VCL Forms Application项目(EXE项目)。
  2. 我已经向项目组添加了一个新的Package项目(BPL项目),并且我修改了它的项目选项,将使用选项设置为“仅限运行时”'并建立控制以明确重建'。
  3. 我在EXE项目和BPL项目之间添加了依赖项(EXE项目依赖于BPL项目)。
  4. 最后,我编译了BPL项目,并在EXE项目中添加了生成的DCP文件作为运行时包(项目选项/包/运行时包)。
  5. 但是当我在EXE项目中添加一个引用来使用BPL项目中的模块(例如moduleX)时,编译器会给出一个这样的错误:

    [dcc32致命错误] ModuleX.pas(7):F1026找不到文件:' C:\ DDDProject \ MyEXEProject \ ModuleX.dcu'

    如果我选中标记为'链接运行时包' EXE项目(MyEXEProject)中的选项解决方案编译没有错误,但我无法运行或调试应用程序。

    拜托,有人可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

  

我不想在DLL或运行时包中拆分正在运行的* .exe应用程序。

运行时包BPL文件 DLL。这就是允许它们在多个EXE之间共享的原因。它们只是普通的DLL,内置了特殊的VCL / FMX处理。

启用"链接运行时包"选项,您将EXE文件链接到您的BPL文件(或DYLIB或SO文件,如果编译Windows以外的平台),所以您必须分发BPL文件(以及它依赖的任何其他BPL文件,如rtl190.bpl和vcl190.bpl)与您的EXE文件。所以他们必须在EXE的文件夹中,或者至少在OS search path中,以便EXE运行。

禁用"链接运行时包"选项,您的软件包代码会直接静态链接到EXE文件中,因此您需要确保EXE项目的搜索路径包含您的软件包的DCU文件所在的文件夹

如果要创建可重用的库而不是BPL,请创建静态库(LIB文件)而不是运行时包。然后,您可以根据需要将LIB文件添加到多个项目中。