为什么delphi BPL包要求rtl190.bpl ...?

时间:2015-12-03 10:44:02

标签: delphi

假设我在delphi 7中有一个项目(或者XE,无论如何),命名为test.exe,另一个项目名为pkg1.bpl(项目类型为Package)。 bpl项目中有一个表单(如aboutbox)和一个显示此表单的函数。 现在我编译这两个项目并运行test.exe。当我点击btn1时,pkg1.bpl加载并调用该函数,并显示aboutbox表单。一切都很好......!

但是当我将此test.exe和pkg1.bpl复制到另一台PC并运行test.exe时,没有问题。但是当我点击btn1时,会发生错误:

  

找不到包(rtl190.bpl)(或者像这样)。

我想知道为什么delphi不使用嵌入test.exe的rtl190.bpl? 或者我该怎么做才能解决这个错误? 我想在我的项目中为我的表单使用bpl包,但我不想将rtl190.bpl或vcl190.bpl或这些文件复制到我的客户PC。 我想(如果可能的话)将所需的bpl文件嵌入到一个文件中,因为其他软件包可以使用它。

1 个答案:

答案 0 :(得分:3)

  

我想知道为什么delphi不使用嵌入test.exe的rtl190.bpl?

没有理由为什么会这样做。软件包唯一受支持的位置是磁盘。这是对底层系统的反映。包是DLL,DLL必须驻留在磁盘上。任何从内存加载它们的工具都使用不受支持的实现细节,并且在将来的Windows版本中可能会中断。

以下是您的选择,我看到了:

  1. 停止使用运行时包,并将所有内容编译为单个可执行文件。然后,您只需复制该单个可执行文件即可。
  2. 继续使用运行时包,并将可执行文件和所有必需的运行时包复制到同一目录中。
  3. 继续使用运行时包,但将它们嵌入到可执行文件中。然后,当可执行文件运行时,将可执行文件解压缩到磁盘上,并动态加载包。动态加载包会增加程序的复杂性。
  4. 继续使用运行时包,但将它们嵌入到可执行文件中。然后,当可执行文件运行时,使用不支持的技术从内存加载可执行文件,例如使用BTMemoryModule。这将进一步增加程序的复杂性。
  5. 坦率地说,我认为选项3和4是疯狂的。选择选项1.