【问题标题】:What is the best way to organize multiple Delphi library packages for the project?为项目组织多个 Delphi 库包的最佳方法是什么?
【发布时间】:2011-07-07 04:22:23
【问题描述】:

我正在寻找一个优雅的解决方案,如何准备 IDE 和构建 Delphi 2010 项目的脚本。目前,我可以为这个项目创建一个自定义注册表项,在启动 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

【问题讨论】:

    标签: delphi packages


    【解决方案1】:

    Delphi 所要求的只是运行时包位于系统路径的某个位置。

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

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

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

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

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

    【讨论】:

    • 感谢您的描述性回答。我将创建两个 bpl 文件夹,用于内部库和不太频繁更改的第 3 方文件。看起来很合理。
    猜你喜欢
    • 1970-01-01
    • 2011-06-11
    • 2013-10-25
    • 1970-01-01
    • 1970-01-01
    • 2020-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多