为项目组织多个Delphi库包的最佳方法是什么?

时间:2011-03-02 10:42:09

标签: delphi packages

我正在寻找一个优雅的解决方案,如何准备Delphi 2010项目的IDE和构建脚本。目前,我可以为此项目创建自定义注册表项,并在启动IDE之前将必要的已知包添加到注册表中,但大多数设计时包需要运行时包,并且在加载IDE期间(或在安装时选择包时)存在错误包窗口。)

将所有运行时包移动到$(BDSCOMMONDIR)\ Bpl中,这是Delphi在搜索包依赖项时似乎唯一可以看到的地方。是否有可能强制delphi在任意多个位置查找包依赖?在下面的示例中,这些位置是:$(Projects)\ Delphi2010 \ CommonControls \ bpl \和$(ExternalComponents)\ Delphi2010 \ DevExpress \ Library \ Delphi14。

我使用的注册表文件是:

Windows Registry Editor Version 5.00

[-HKEY_CURRENT_USER\Software\CodeGear\ProductName\7.0\Disabled Packages]
[-HKEY_CURRENT_USER\Software\CodeGear\ProductName\7.0\Known Packages]

[HKEY_CURRENT_USER\Software\CodeGear\ProductName\7.0\Known Packages]
"$(Projects)\\Delphi2010\\CommonControls\\bpl\\CommonControls.bpl"="Common Controls"
"$(ExternalComponents)\\Delphi2010\\DevExpress\\Library\\Delphi14\\dcldxCoreD14.bpl"="ExpressCoreLibrary by Developer Express Inc."
"$(ExternalComponents)\\Delphi2010\\DevExpress\\Library\\Delphi14\\dclcxLibraryD14.bpl"="Express Cross Platform Library by Developer Express Inc."
"$(ExternalComponents)\\Delphi2010\\DevExpress\\Library\\Delphi14\\dcldxDockingD14.bpl"="ExpressDocking Library by Developer Express Inc."
"$(ExternalComponents)\\Delphi2010\\DevExpress\\Library\\Delphi14\\dclcxSpreadSheetD14.bpl"="ExpressSpreadSheet by Developer Express Inc."
"$(ExternalComponents)\\Delphi2010\\DevExpress\\Library\\Delphi14\\dcldxSBD14.bpl"="ExpressSideBar by Developer Express Inc."
"$(ExternalComponents)\\Delphi2010\\DevExpress\\Library\\Delphi14\\dcldxBarD14.bpl"="ExpressBars by Developer Express Inc."
"$(ExternalComponents)\\Delphi2010\\DevExpress\\Library\\Delphi14\\dcldxBarDBNavD14.bpl"="ExpressBars DBNavigator by Developer Express Inc."
"$(ExternalComponents)\\Delphi2010\\DevExpress\\Library\\Delphi14\\dcldxBarExtDBItemsD14.bpl"="ExpressBars extended DB items by Developer Express Inc."
"$(ExternalComponents)\\Delphi2010\\DevExpress\\Library\\Delphi14\\dcldxBarExtItemsD14.bpl"="ExpressBars extended items by Developer Express Inc."
"$(ExternalComponents)\\Delphi2010\\DevExpress\\Library\\Delphi14\\dcldxRibbonD14.bpl"="ExpressBars Ribbon controls by Developer Express Inc."

启动IDE的批处理文件:

regedit.exe /S ProductName.reg
start "delphi" "%DELPHI2010%\bin\bds.exe" -rProductName

1 个答案:

答案 0 :(得分:4)

所有Delphi要求的是运行时包在系统路径上的某个位置。

如果Delphi似乎只在BDSCOMMONDIR文件夹中查找,因为这是您和您的第三方bpl的唯一文件夹,也在您的系统路径上。

所以您需要做的就是将$(Projects)\Delphi2010\CommonControls\bpl\$(ExternalComponents)\Delphi2010\DevExpress\Library\Delphi14的值添加到系统路径中。

但是,系统路径的长度有限。如果你有足够的组件库,这种方法很快就会吃掉。因此,您确实需要考虑将所有运行时库放入单个目录中。或者使用两个:(一个用于您自己的运行时库,另一个用于第三方运行时库。

这不需要是用于BDSCOMMONDIR环境变量的默认文件夹。您可以覆盖BDSCOMMONDIR环境变量指向的文件夹。只需使用工具|添加覆盖环境选项|环境变量。

将覆盖添加到指向您希望所有第三方(运行时)库的文件夹后,重新编译它们。如果组件表现良好,则应使用其输出位置的默认设置,这意味着它们的bpl应该最终位于新位置。