gpt4 book ai didi

delphi - 转向使用 Delphi 包 - 最佳实践好吗?

转载 作者:行者123 更新时间:2023-12-03 14:46:10 25 4
gpt4 key购买 nike

我正在尝试在使用这些包编译我的应用程序之前开始将我自己的库作为包提供,从而模块化我的代码。多年来,我已经“有点”理解了软件包,当我加载组件包并单击“安装”时,我松了一口气。据我所知,安装一个或多个组件的过程是通过创建 BPL,然后将其注册到 IDE 来实现的。

我开始迷失的是如何使文件可用,以便我可以使用包或预编译的 dcu 进行编译(就像第三方供应商那样),而无需始终将我的项目指向源代码。我可以使用以下设置创建一个包:

enter image description here

我已指定所有输出都将进入“c:\scratch\wow”。构建后,我发现 TEST.BPL、TEST.DCP 和许多 DUC。现在,当我将另一个项目指向此文件夹以使用 DCU 时,我收到丢失 DFM 错误(其中一个单元是表单)。我应该手动将所需的 DFM 复制到此输出文件夹中吗? DPK 知道此表格,那么为什么我不为我复制 DFM?我认为使用 TEST.BPL,该文件包含所有内容,但我希望在两种模式下工作。当然,我可以通过在项目搜索路径中包含源文件夹来查找 DFM 来解决此问题,但第三方库似乎已在其输出文件夹中包含 DFM。他们是使用安装程序安装的吗?谢谢

相反

最佳答案

正如其他人所说,您可以使用构建后事件将 DFM 文件复制到位。其他人使用一次性外部批处理文件将 DFM 复制到 DCU 文件夹。

就我个人而言,我认为为那些未开发为可重用组件的东西制作包几乎没有什么好处。我还认为,当您不需要多次或在设计时使用相同的子部分或包时,将现有应用程序划分为包的好处微乎其微。

我会放入包中的东西:

  1. Delphi 可视化和非可视化组件。

  2. 绝对必须在运行时插入或省略的东西。例如,假设我销售 MetaWare Light 和 MetaWare Pro,并且不使用编译器 IFDEF 来构建不同的二进制文件,出于某种原因,我宁愿不将 ADVANCEDFEATURE.BPL 随我的系统一起提供。

使用包时需要注意的事项:

  1. 在将包与泛型组合时,我遇到了很多编译器错误。我在 Delphi 2009、2010、XE 和 XE2 中也遇到过 IDE 崩溃和锁定的情况。 (我认为XE3更好)

  2. 在开始学习之前,您应该了解一些有关 BorlandMM.dll 和 BPL 世界中的共享内存管理的知识。有一些微妙之处。

  3. 包限制了链接器决定删除内容的能力。事实上,它几乎摧毁了它。包包含链接到其中的所有内容,并且无法删除任何可公开访问的内容。

  4. 一旦您创建了一个二进制包并将其运送给一个客户,即使是一个客户,您也将很难修改契约(Contract)(此 BPL 包含特定的签名或应用程序二进制接口(interface)),您将来必须小心永远不要改变它们,或者混合搭配它们。小心 DLL hell ,即使是在您自己的客户中,并准备好在您的包上使用版本控制。正如 delphi 包有版本后缀一样,我建议您立即在自己的包中使用版本后缀,并在二进制兼容性发生更改时更改它们。

  5. Delphi 处理包之间的构建依赖关系的效果与预期的一样好,这不如单个整体应用程序好。在我拥有的大量使用包的应用程序中,我发现包含一堆相互依赖的包的项目组很难管理和快速构建。事实上,我的经验是,编译和构建都比单个 750Kline 大型项目更慢、更令人沮丧。

我真的想知道,如果您真的想完全进入包世界,您是否不太喜欢 Delphi 的包区域(每当 Delphi 组件实际构建和安装没有问题时,您都会松一口气?)。无论如何,你应该尝试一下。但我还不会把农场的赌注押在这上面。首先了解更多信息。

关于delphi - 转向使用 Delphi 包 - 最佳实践好吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6808551/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com