【发布时间】:2011-05-19 04:19:49
【问题描述】:
我正在编写一个 delphi ide 专家,带有一些第三方依赖项(可视化控件),我的问题是何时将这个专家安装在目标机器上,这台电脑是否也需要安装这些第三方组件?还是组件嵌入在生成的 bpl 中?
【问题讨论】:
标签: delphi
我正在编写一个 delphi ide 专家,带有一些第三方依赖项(可视化控件),我的问题是何时将这个专家安装在目标机器上,这台电脑是否也需要安装这些第三方组件?还是组件嵌入在生成的 bpl 中?
【问题讨论】:
标签: delphi
它们将取决于您放置在包的 requires 子句中的任何包。然后是他们需要的任何软件包,等等......
如果您将所依赖的单元放入您的包中,它们可以被嵌入。
例子:
package Package1;
...
// Items in the section mean that your package
// will depend on the BPL of the other package
// Target machine must have the BPL's listed here.
requires
rtl;
// Unit's here mean that the code is in your
// package and not in another BPL
contains
Unit8 in 'Unit8.pas';
end.
注意事项
避免问题的一种方法
这种方法我见过很多次了。
例如Castalia这样做,而recommends这个方法在使用时是开源的delphi lexer and parser.
【讨论】:
如果您可以避免链接到第 3 方控件的设计时版本,只坚持运行时 BPL,您可以合法地以您的专家作为您的专家来发布这些。
很遗憾,我不能说您可以安全地发布它们,因为您正在与其他 Delphi 开发人员打交道:他们可能拥有相同的第 3 方软件包,但版本不同!使用普通应用程序,您可以简单地将 BPL 版本安装到应用程序的目录中,但这不适用于 Delphi IDE,因为应用程序就是 IDE:IDE 是加载和链接 BPL 的工具,它可以'不加载相同 BPL 的两个版本。而且您不能替换用户的版本,因为他们需要保留他们许可的版本,即使您的版本较新!
一种可能的解决方案是将您的专家编译为 DLL,而不是包,并静态链接所有依赖项。这样一来,您就不再依赖于用户的 3rd 方控件版本。
【讨论】:
正如 Robert Love 所说:存在依赖关系,
任何 delphi 项目都可以设置为编译 with 或 without 包。项目 |选项 |包 |选中或取消选中“使用运行时包构建”。
当您构建/编译 with 包时,这意味着您没有嵌入包中的代码,您将不得不分发您的专家所依赖的 bpl。正如 Robert 所说:选择此选项时,请注意有关重新分发的许可证。
当您构建/编译没有包时,来自第三方控件/库的代码会嵌入到您的可执行文件/dll 中,这就是您必须分发的全部内容。
【讨论】: