为不同版本的Delphi编译Delphi组件包(bpl)

7
情况如下。通常我使用RAD Studio 2010进行Delphi开发。我有一些组件想要以二进制形式(*.bpl没有源代码)重新分发。但我希望人们能够使用它们,无论他们使用的是哪个Delphi版本。但是,例如,dcu文件只能被生成它们的编译器版本使用。据我所知,bpl文件的情况几乎相同。每个bpl文件都需要相应的VCLXX.bpl库,具体取决于Delphi版本。我该如何使我的在2010年编译的bpl文件能够在Delphi7、2007等版本中使用?
唯一的解决方法是安装所有Delphi版本并在每个版本中单独编译bpl文件吗?

潜在的“奖金”问题:构建这些 BPL 文件是否需要“完整”的 Delphi 版本(无升级)?例如,从 Delphi 7 升级到 Delphi 2010 后,许可证是否允许分发使用原始 Delphi 7 版本创建的 BPL 和使用 Delphi 2010 升级创建的文件? - mjn
1
是的,@mjustin,这是允许的。人们经常这样做。我的印象是所有组件供应商都这样做。 - Rob Kennedy
3
大多数 Delphi 开发人员不愿意使用没有源代码的组件,因为如果没有更新的软件包可用,你就不能使用新版本的 Delphi,而且如果这些软件包变得无人维护,那么你将会面临问题。 - user160694
4个回答

7

是的,这是唯一的解决方案。每个编译器都会生成特定于其版本的DCU和BPL文件。我所知道的唯一例外是Delphi 2006和2007共享相同的格式。


1
详细说明一下 - 只提供二进制文件的组件供应商往往会将它们打包成一个安装程序,其中包含所有支持的二进制文件,然后安装用户选择的那些文件。 - Remy Lebeau

4
要分发可以由多个编译器版本使用的已编译代码,请分发普通的DLL而不是BPL。包和单元是特定于版本的。
创建以C样式导出的独立函数,或者创建注册到操作系统的COM对象。
这并不一定要改变您的整个开发策略; 它可以是使用BPL的DLL,因此您可以保留已经放入包中的所有工作。

不幸的是,这将需要我的用户应用程序来包含我的dll库。我认为普通用户不会乐意重新分发它们。 - Vladislav Rastrusny
如果您的原始计划——BPL是可行的,那么他们必须这样做。在这方面没有任何区别。(尽管我听说有一些方法可以将DLL捆绑在EXE中,适用于那些真正关心分发文件数量的人。) - Rob Kennedy
Delphi可以将BPL中的代码集成到目标EXE中,无需单独重新分发BPL。 - Vladislav Rastrusny
1
不,Delphi不能做到这一点。也许你在想DCP文件,据我所知,它本质上是一个包含了所有DCU文件的集合。但是该文件仅在使用包时使用,因此您仍需要BPL文件。 - Rob Kennedy

1
你可以在C++ Builder中创建一个obj文件,然后在Delphi中链接它,分发一个小的pas文件(头文件)。从Delphi 7到2009,C++ Builder的obj格式没有改变(我可以确认2010也是一样的)。但是你需要测试一下,看看这是否适用于可视化/设计时组件。

0

我可以创建一个安装程序,获取机器上已安装的Delphi版本。 选择要为哪个Delphi创建bpl并通过命令行调用相应的Dcc来生成相应的bpl并安装在Delphi中。 您可以查看JVCL安装程序以获得示例。

敬礼。


@SaCi,JVCL以源代码的形式重新分发,并在目标开发者PC上编译为二进制文件。 所以,这不是我的情况。 - Vladislav Rastrusny

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接