Delphi 运行时包选项要求bpl文件

Delphi 运行时包选项要求bpl文件,delphi,package,Delphi,Package,因此,我为我的应用程序构建了一个运行时包。这需要一些其他的bpl,比如:ADORTL.bpl、BDRTL.bpl、VCL.bpl等等。现在我想使用我在主应用程序中创建的BPL,并且我还想在运行时加载它。因此,每当用户执行需要bpl提供一些信息的操作时,我都会加载它,并在不需要的情况下卸载它 为了在主应用程序中使用我的bpl,我必须用运行时包编译我的应用程序。如果我在将.exe文件移动到另一台没有安装Delphi的计算机上时这样做,它会要求大量BPL工作。是否有一种方法可以使用运行时包构建并以某种

因此,我为我的应用程序构建了一个运行时包。这需要一些其他的bpl,比如:
ADORTL.bpl、BDRTL.bpl、VCL.bpl
等等。现在我想使用我在主应用程序中创建的BPL,并且我还想在运行时加载它。因此,每当用户执行需要bpl提供一些信息的操作时,我都会加载它,并在不需要的情况下卸载它

为了在主应用程序中使用我的bpl,我必须用运行时包编译我的应用程序。如果我在将.exe文件移动到另一台没有安装Delphi的计算机上时这样做,它会要求大量BPL工作。是否有一种方法可以使用运行时包构建并以某种方式将(vcl.bpl、adortl.bpl)集成到exe文件中


我希望我的主应用程序只要求我创建的BPL,而不是Delphi IDE BPL

不,这就是它的工作方式。可以使用运行时包进行编译,也可以不使用。这就像怀孕:要么是,要么不是。

在指定使用运行时包的项目选项中,有一个列出所需包的编辑框。删除您不需要的任何包名,它们将被编译到EXE文件中

但是,请注意,您保留的BPL文件也使用其他BPL文件。特别是,您的BPL可能使用VCL和RTL包。因此,当您加载包时,它将隐式加载其他包。不能同时加载任何单元的多个副本。您的包使用RTL,因此您的EXE也需要使用RTL包;您不能像上面描述的那样从编辑框中忽略它。如果您这样做,那么您的EXE将有一个RTL单元的副本,而包将有另一个,这是不允许的

如果有某个包只供您的包使用,那么您还可以执行其他操作。从包的“需要”列表中删除另一个包并重新编译。编译器将对隐式包含的单元发出警告,即通常位于刚刚删除的包中的单元。显式地将这些单元添加到包中,然后重新编译。重复此操作,直到警告消失。您实际上是在定义所有包的唯一依赖项的“超级包”。(VCL和RTL不是唯一的依赖项,因此不要从“需要”列表中忽略它们。)

您不能安排EXE仅使用一个BPL文件,并且动态加载和卸载该BPL文件。如果动态加载包,那么至少也需要使用RTL和VCL包


此外,您同意的Delphi许可证可能会限制您重新打包RTL和VCL单元。我不清楚细节。请仔细阅读许可证以进行检查。

谢谢您的回答,至少我不会浪费时间寻找解决方案。还有一个问题:我是否可以告诉.exe文件在哪里查找bpl,至少我想将它们添加到一个单独的文件夹中。应用程序要使用它们,.bpl文件必须位于系统路径上。它们就像标准DLL一样加载。如果指定
LoadPackage()
的完整路径,它将从该确切位置加载BPL,但它所依赖的任何BPL仍然需要系统的帮助才能找到它们。不过,您可以使用或向该搜索添加自定义路径。