【问题标题】:Third party dependencies in a delphi expertdelphi 专家中的第三方依赖项
【发布时间】:2011-05-19 04:19:49
【问题描述】:

我正在编写一个 delphi ide 专家,带有一些第三方依赖项(可视化控件),我的问题是何时将这个专家安装在目标机器上,这台电脑是否也需要安装这些第三方组件?还是组件嵌入在生成的 bpl 中?

【问题讨论】:

    标签: delphi


    【解决方案1】:

    它们将取决于您放置在包的 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.
    

    注意事项

    • 加载了两个包含同名单元的包。
    • 第 3 方组件的许可,因为商业库通常不能重新打包为库。
    • 开发人员可能还想使用不同版本的第 3 方组件。您需要向这些开发者提供源代码,以便他们重新关联您的专家。

    避免问题的一种方法

    • 重命名使用的第 3 方单位。
    • 在您的包中包含重命名的单元。

    这种方法我见过很多次了。

    例如Castalia这样做,而recommends这个方法在使用时是开源的delphi lexer and parser.

    【讨论】:

    • 罗伯特,感谢您的回答,所以如果我的项目有依赖项,例如 JVCL(绝地)控件,即使没有安装该组件(JVCL),专家也会在目标机器上正常工作?
    • @Salvador,包有点复杂。如果您不链接到 JVCL 包,这些单元将自动包含在您的项目中,然后可供 IDE 使用。当您尝试将软件包安装到 IDE 中时,IDE 应该会抱怨在多个项目中存在不同的单元。并查看我的回答,了解为什么您不能运送第 3 方 BPL。无论如何,不​​安全。
    • @Salvador,更新了答案,但是是的,您将需要目标机器上的 JVCL。除非您将 JVCL 单元(希望重命名)放在包的包含区域中。
    【解决方案2】:

    关于 BPL 专家:

    如果您可以避免链接到第 3 方控件的设计时版本,只坚持运行时 BPL,您可以合法地以您的专家作为您的专家来发布这些。

    很遗憾,我不能说您可以安全地发布它们,因为您正在与其他 Delphi 开发人员打交道:他们可能拥有相同的第 3 方软件包,但版本不同!使用普通应用程序,您可以简单地将 BPL 版本安装到应用程序的目录中,但这不适用于 Delphi IDE,因为应用程序就是 IDE:IDE 是加载和链接 BPL 的工具,它可以'不加载相同 BPL 的两个版本。而且您不能替换用户的版本,因为他们需要保留他们许可的版本,即使您的版本较新!

    解决方案:DLL 专家:

    一种可能的解决方案是将您的专家编译为 DLL,而不是包,并静态链接所有依赖项。这样一来,您就不再依赖于用户的 3rd 方控件版本。

    【讨论】:

    • 如何生成 dll 专家?我必须在我的 dpk 文件的项目选项中设置一个属性吗?或者我需要创建一个新的 dll 项目?
    【解决方案3】:

    正如 Robert Love 所说:存在依赖关系,

    任何 delphi 项目都可以设置为编译 withwithout 包。项目 |选项 |包 |选中或取消选中“使用运行时包构建”。

    当您构建/编译 with 包时,这意味着您没有嵌入包中的代码,您将不得不分发您的专家所依赖的 bpl。正如 Robert 所说:选择此选项时,请注意有关重新分发的许可证。

    当您构建/编译没有包时,来自第三方控件/库的代码会嵌入到您的可执行文件/dll 中,这就是您必须分发的全部内容。

    【讨论】:

      猜你喜欢
      • 2018-12-09
      • 2019-05-30
      • 2017-04-14
      • 2021-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多