自定义组件依赖地狱

Thi*_*ien 10 delphi delphi-2010 custom-component graphicex

我正在尝试为我制作的自定义组件制作一个包.它基于几个库,包括Graphics32,GraphicEx和CCR.Exif.

我创建了一个Package项目,编写了包含其Register寄存程序的单元,添加了一些额外的引用,Delphi通知我有关requires部分(包括dbrtl.dcp,inet.dcp,soaprtl.dcp,vclimg.dcp,xmlrtl.dcp和dclGraphicEx140). dcp)并在contains部分添加了许多单元,以避免隐式发生有关它的警告.该项目编译并可以在我自己的机器上安装和使用而不会出现问题.但是,当我想在另一台机器上安装它时,麻烦就开始了.最后,我不得不复制我使用的所有第三方组件的所有DCU,以及来自GraphicEx的DCP和BPL,我必须安装它.

提供大量文件是一个无赖,但可以克服,但不得不安装其他软件包是不行的.我可以通过在包含部分中放置更多单元来摆脱DCP和BPL ,但这导致我自己的机器上实际安装了GraphicEx的错误消息.这对我来说很困惑,因为有了Graphics32就不会发生这样的事了......

无论如何,我如何将我的分配保持在最低限度并避免这种情况?我希望我团队中的其他开发人员能够使用该软件包,而不必担心我用它来构建它.首先,不能将所有第三方单元编译到我自己的DCU中吗?

uml*_*cat 0

概括

有一段时间没有使用 Delphi,但是,确实开发了我的自定义视觉控件(我工作的最后一个版本是 Delphi 6)。

处理包依赖性时有两个问题。一种是安装在Delphi环境中,使控件出现在组件面板上,以及组件编辑器和属性编辑器上。

还有一个是将编译好的软件包分发到客户机器上的情况。

它还取决于您运行的 Delphi 版本。

设计时间

开发自定义包时,有一个包选项选项卡,指示目标文件夹。

手册通常告诉开发人员将这些文本框留空。这有时有效,有时无效。我在相应的文本框中明确写入每个文件夹路径。

“.dcp”文件有一个文本框路径,“.dcu”文件有一个文本框路径,依此类推。

如果您有可视化控件和诸如属性编辑器或组件编辑器之类的东西,最好将代码分成 2 个包(“运行时”和“设计时”)。

我通常将delphi(包)项目放在delphi安装文件夹之外。

运行

通常,快速的方法是将“*.bpl”“.dcp”文件放在Windows(32)/系统文件夹中,或类似的“DLL”Windows文件夹中。


Packages 文件夹结构源代码建议

管理包可能很困难。我不知道 Embarcadero 和较新版本的 Delphi 安装过程发生了多大变化。下图是如何组织源代码的示例。希望能帮助到你。

[-]--+--c:
.....|
.....+--[-]--+--software
.............|
.............+--[+]-----java
.............|
.............+--[+]-----php
.............|
.............+--[-]--+--delphi (not the delphi folder in program files)
.....................|
.....................+--[+]-----apps (source code for delphi programs)
.....................|
.....................+--[+]-----other
.....................|
.....................+--[-]--+--packages (all delphi packages source code here)
.............................|
.............................+--[+]-----lib (a single package for non visual controls, libraries)
.............................|
.............................+--[+]-----tools (package pair for non visual tcomponent descendants)
.............................|
.............................+--[+]-----json (example)
.............................|
.............................+--[+]-----xml (example)
.............................|
.............................+--[-]--+--mycontrols (folder custom visual controls)
.............................|.......|
.............................|.......+--[-]--+--delphi40 (folder for delphi40 version of "mycontrols")
.............................|.......|.......|
.............................|.......|.......+----------dsgvclctrls40.dpk (design-time package "mycontrols")
.............................|.......|.......|
.............................|.......|.......+----------runvclctrls40.dpk (run-time package "mycontrols")
.............................|.......|.......|
.............................|.......|.......+--[+]--+--demos (individual example for each "mycontrol")
.............................|.......|.......|
.............................|.......|.......+--[+]--+--design ("*.pas" component editors  destination folder)
.............................|.......|.......|
.............................|.......|.......+--[+]--+--sources ("*.pas" source code destination folder)
.............................|.......|.......|
.............................|.......|.......+--[+]--+--bin ("*.dcu" destination folder)
.............................|.......|........
.............................|.......+--[+]--+--delphi50 (folder for delphi50 version of "mycontrols")
.............................|.......|........
.............................|.......+--[+]--+--delphi60 (folder for delphi60 version of "mycontrols")
.............................|.......|........
.............................|.......+--[+]--+--delphi70 (folder for delphi70 version of "mycontrols")
.............................|................
.............................+--[-]-----etc...
Run Code Online (Sandbox Code Playgroud)

干杯。

  • 抱歉,但我不明白这如何回答我关于如何编写和/或分发组件的问题,以便用户(开发人员)不必采取特殊措施(下载/安装依赖项,组织他的项目)一种特定的方式)来使用它。 (3认同)