我正在写一个delphi ide专家,有一些第三方依赖(可视化控件),我的问题是当这个专家将被安装在目标机器上时,这台PC还需要安装这些第三方组件吗?或者组件是 embeded 在生成的bpl中?
答案 0 :(得分:4)
它们将依赖于您在包的require子句中放置的任何包。然后是他们需要的任何包裹,依此类推......
如果您将依赖的单位放入包中,可以嵌入它们。
示例:
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.
答案 1 :(得分:3)
正如Robert Love所说:依赖存在,
任何delphi项目都可以设置为使用编译或不使用编译。项目|选项|包裹|选中或取消选中“使用运行时包构建”。
使用包构建/编译时,这意味着您没有嵌入包中的代码,您必须分发专家所依赖的bpl。正如罗伯特所说:当你选择这个选项时,请注意有关再分配的许可证。
当您构建/编译没有包时,来自第三方控件/库的代码将嵌入到您的可执行文件/ dll中,这就是您必须分发的所有内容。
答案 2 :(得分:3)
如果您可以避免链接到第三方控件的设计时版本,只关注运行时BPL,您可以合法地将您的专家作为专家发送。
不幸的是,我不能说你可以安全发送它们,因为你正在与其他Delphi开发者打交道:他们可能拥有相同的第三方软件包,但版本不同!使用普通应用程序,您只需将您的BPL版本安装到您的应用程序目录中,但这不适用于Delphi IDE,因为该应用程序是IDE:IDE是加载和链接BPL的IDE,它可以加载相同BPL的两个版本。并且您无法替换用户的版本,因为他们需要保留他们获得许可的版本,即使您的版本较新也不行!
一种可能的解决方案是将您的专家编译为DLL,而不是作为包编译,并静态链接所有依赖项。这样您就不再依赖于用户的第三方控件版本了。