我正在编写一个Delphi IDE专家,其中包含一些第三方依赖项(可视控件),我的问题是当此专家在目标计算机上安装时,这台电脑是否需要安装这些第三方组件?还是这些组件被嵌入到生成的BPL文件中了?
我正在编写一个Delphi IDE专家,其中包含一些第三方依赖项(可视控件),我的问题是当此专家在目标计算机上安装时,这台电脑是否需要安装这些第三方组件?还是这些组件被嵌入到生成的BPL文件中了?
如果您在包的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就这样做,并且建议在使用其开源Delphi词法分析器和解析器时采用此方法。
如果您可以避免链接到第三方控件的设计时版本,而只使用运行时BPL,则可以将其作为您的专家与您一起合法地发布。
不幸的是,我不能保证您可以“安全地”发布它们,因为您正在处理其他Delphi开发人员:他们可能拥有相同的第三方软件包,但版本不同!对于普通应用程序,您可以简单地将BPL的版本安装到应用程序目录中,但是对于Delphi IDE来说,这种方法行不通,因为该应用程序就是IDE:IDE是加载和链接BPL的程序,它无法加载两个相同BPL的版本。您也无法替换用户的版本,因为他们需要保留已经许可的版本,即使您的版本更新也不行!
一个可能的解决方案是将您的专家编译为DLL而不是包,并静态链接所有依赖项。这样,您就不再依赖于用户的第三方控件版本。