我从Delphi XE5开始,我想将我的应用程序拆分为一个exe和多个可重用的库。这意味着我不想在dll或运行时包中拆分正在运行的*.exe应用程序。
为了实现这一点,我已经看到在delphi中我们可以创建运行时包,我遵循以下步骤:
- 我已经创建了一个新的VCL Forms Application项目(EXE项目)。
- 我已经添加了一个新的包项目(BPL项目)到项目组,我已经修改了它的项目选项设置使用选项为"仅运行时"和构建控制为"显式重建"。
- 我在EXE项目和BPL项目之间添加了一个依赖项(EXE项目依赖于BPL项目)。 最后,我编译了BPL项目,并将生成的DCP文件作为运行时包添加到EXE项目中(project options/package/runtime Packages)。
但是当我在EXE项目上添加引用以使用BPL项目的模块(例如modulelex)时,编译器给我一个这样的错误:
[dcc32致命错误]ModuleX.pas(7): F1026 File not found: 'C:DDDProjectMyEXEProjectModuleX.dcu'
如果我在EXE项目(MyEXEProject)中标记为选中"链接运行时包"选项,解决方案编译没有错误,但我不能运行或调试应用程序。
请问,有人能帮我吗?我不想在dll或运行时包中拆分正在运行的*.exe应用程序。
Runtime Package BPL文件是 dll。这就是允许它们在多个exe之间共享的原因。它们只是普通的dll,内置了特殊的VCL/FMX处理。
当您启用"与运行时包链接"选项时,您将EXE文件链接到您的BPL文件(或DYLIB或SO文件,如果为Windows以外的平台编译),因此您必须分发BPL文件(以及它所依赖的任何其他BPL文件,如rtl190)。bpl和vcl190.bpl)与您的EXE文件。所以它们必须在EXE的文件夹中,或者至少在操作系统的搜索路径中,以便EXE运行。
当你禁用"链接运行时包"选项时,你的包的代码被静态地直接链接到EXE文件中,所以你需要确保EXE项目的搜索路径包括你的包的DCU文件所在的文件夹。
如果你想创建一个可重用的库而不是BPL,那么创建一个静态库 (LIB文件)而不是运行时包。然后您可以根据需要将LIB文件添加到多个项目中。