为不同的Delphi版本编译Delphi组件包(bpl)
Posted
技术标签:
【中文标题】为不同的Delphi版本编译Delphi组件包(bpl)【英文标题】:Compile Delphi component package (bpl) for different Delphi versions 【发布时间】:2011-01-09 17:26:03 【问题描述】:情况如下。通常我使用 RAD Studio 2010 进行 Delphi 开发。我有一些组件想以二进制形式重新分发(*.bpl 没有源代码)。但我希望人们能够使用它们,尽管他们的 Delphi 版本。但是,例如,dcu 文件只能由生成它们的编译器版本使用。据我所知,bpl 文件的情况几乎相同。每个 bpl 文件都需要相应的 VCLXX.bpl 库,具体取决于 Delphi 版本。如何使我在 2010 年编译的 bpls 能够在 Delphi7、2007 等中使用?
是安装所有 Delphi 版本并在每个版本中分别编译 bpl 文件的唯一解决方案吗?
【问题讨论】:
潜在的“额外”问题:构建这些 BPL 文件是否需要“完整”Delphi 版本(无需升级)?例如,从 Delphi 7 升级到 Delphi 2010 后,许可证是否允许分发使用原始 Delphi 7 版本创建的 BPL和使用 Delphi 2010 升级创建的文件? 是的,@mjustin,这是允许的。人们总是这样做。我的印象是所有组件供应商都这样做。 大多数 Delphi 开发人员拒绝使用无源分发的组件 - 正是因为在更新的软件包可用之前,您不能使用较新版本的 Delphi,如果这些软件包变得无人管理,您就会遇到问题。跨度> 【参考方案1】:是的,这是唯一的解决方案。每个编译器都会生成特定于它自己版本的 DCU 和 BPL。我知道的唯一例外是 Delphi 2006 和 2007 共享相同的格式。
【讨论】:
详细说明这一点 - 仅提供二进制文件的组件供应商倾向于将它们打包到包含所有受支持二进制文件的安装程序中,然后安装用户选择的那些。【参考方案2】:要分发可供多个编译器版本使用的编译代码,请分发普通 DLL,而不是 BPL。包和单元是特定于版本的。
创建以 C 风格导出的独立函数,或创建向操作系统注册的 COM 对象。
不过,它不必改变您的整个开发策略;它可能是一个使用 BPL 的 DLL,因此您可以保留已放入包中的所有工作。
【讨论】:
不幸的是,这将需要我的用户的应用程序来包含我的 dll 库。我认为普通用户不会乐意重新分发它们。 如果您的原始计划(BPL)可行,他们必须这样做。在这方面没有区别。 (虽然我听说有一些方法可以在 EXE 中捆绑一个 DLL,但对于那些真正关心他们分发多少文件的人来说。) Delphi 可以从 BPL 中获取代码并将其集成到目标 EXE 中。无需单独重新分发 BPL。 不,Delphi 做不到。也许您正在考虑 DCP 文件,据我了解,它本质上是一个包中所有 DCU 文件的集合。但该文件仅在使用包时使用,因此您仍然需要 BPL 文件。【参考方案3】:您可以在 c++ builder 中创建一个 obj 文件并在 Delphi 中链接它,分发一个小的 pas 文件(头文件)。 c++ builder obj 格式从 delphi 7 到 2009 没有变化(我可以确认 2010,但我认为它也将是相同的)。
您需要测试视觉/设计时组件是否可行。
【讨论】:
【参考方案4】:我可以创建一个安装程序,在机器上获取已安装的 Delphi 版本。 选择您要创建de bpl的女巫Delphi并通过命令行调用对应的Dcc以生成对应的bpl并安装在Delphi中。 您可以查看 JVCL 安装程序以获取示例。
委托人
【讨论】:
@SaCi,JVCL 以源代码形式重新分发,并在目标开发人员 PC 上编译为二进制文件。所以,这不是我的情况。以上是关于为不同的Delphi版本编译Delphi组件包(bpl)的主要内容,如果未能解决你的问题,请参考以下文章