转向使用Delphi软件包 - 请最好的做法?

Bri*_*ost 8 delphi package dfm

我试图在使用这些软件包编译我的应用程序之前开始创建自己的库作为软件包,从而模块化我的代码.多年来,我有点'了解'包装,当我加载组件包并点击"安装"时它会松一口气,而且确实如此.我知道安装组件(或组件)的过程是通过创建BPL然后在IDE中注册.

我开始迷路的地方是如何使文件可用,以便我可以使用EITHER编译包或预编译的dcu(就像第三方供应商那样)并且不会一直指向我的项目源代码.我可以使用以下设置创建一个包:

在此输入图像描述

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

代替

War*_* P 9

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

就个人而言,我认为将未开发的产品包装成可重复使用的组件的好处很少.当您不合理地需要多次使用相同的子部分或包或在设计时使用时,我也看到将现有应用程序分区到包中的好处很少.

我要放入包装的东西:

  1. Delphi视觉和非视觉组件.

  2. 绝对必须在运行时插入或遗漏的东西.例如,假设我销售MetaWare Light和MetaWare Pro,而不是使用编译器IFDEF来构建不同的二进制文件,我出于某种原因,我更倾向于不使用我的系统发送ADVANCEDFEATURE.BPL.

包裹要注意的事项:

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

  2. 在转移到BPL世界之前,您应该了解一下BorlandMM.dll和共享内存管理.有一些微妙之处.

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

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

  5. Delphi处理包之间的构建依赖关系,这可能是希望的,这不如单个单片应用程序好.在我大量使用软件包的应用程序中,我发现包含一堆彼此依赖的软件包的项目组很难快速管理和构建.事实上,我经历过,编译和构建都比单个750Kline大型项目更慢,更令人沮丧.

我真的很想知道你是不是进入Delphi的软件包领域(如果你真的想要完全进入软件包世界,那么每当delphi组件实际构建和安装时都会毫无问题地放松一下吗?)无论如何,你应该试验一下.但我不打赌它的农场.先学一点.


Rud*_*uis 5

是的,您应该将.dfm复制到包含已编译单元(.dcus)的目录,如果这是您在搜索路径中所需的唯一目录.BPL当然包含.dfms,你需要一个.dcp才能将BPL与你的应用程序链接起来.

第三方工具必须使用安装程序将.dfms与.dcus一起放在目录中.