1

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

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

  1. 我创建了一个新的 VCL Forms Application 项目(EXE 项目)。
  2. 我已将一个新的包项目(BPL 项目)添加到项目组中,并且我已修改其项目选项以将使用选项设置为“仅运行时”并将构建控制设置为“显式重建”。
  3. 我在 EXE 项目和 BPL 项目之间添加了一个依赖项(EXE 项目依赖于 BPL 项目)。
  4. 最后我编译了BPL项目并将生成的DCP文件作为运行时包添加到EXE项目中(Project options/Package/Runtime Packages)。

但是,当我在 EXE 项目上添加引用以使用 BPL 项目中的模块(例如 moduleX)时,编译器会给我一个如下错误:

[dcc32 致命错误] ModuleX.pas(7): F1026 File not found: 'C:\DDDProject\MyEXEProject\ModuleX.dcu'

如果我在 EXE 项目 (MyEXEProject) 中将“与运行时包链接”选项标记为选中,则解决方案编译时不会出错,但我无法运行或调试应用程序。

请问,谁能帮帮我?

4

1 回答 1

1

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

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

当您启用“与运行时包链接”选项时,您将 EXE 文件链接到您的 BPL 文件(或 DYLIB 或 SO 文件,如果为 Windows 以外的平台编译),因此您必须分发 BPL 文件(以及任何其他 BPL它依赖的文件,如 rtl190.bpl 和 vcl190.bpl) 与您的 EXE 文件。所以它们必须在 EXE 的文件夹中,或者至少在OS 搜索路径中,才能运行 EXE。

当您禁用“与运行时包链接”选项时,您的包的代码直接静态链接到 EXE 文件中,因此您需要确保 EXE 项目的搜索路径包括您的包的 DCU 文件所在的文件夹。

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

于 2014-06-15T18:24:50.197 回答