【问题标题】:Fuss over Runtime and Design Time packages in Delphi在 Delphi 中对运行时和设计时包大惊小怪
【发布时间】:2010-10-20 13:08:01
【问题描述】:

我看到 Delphi 中的大多数组件 (VCL) 都分为两部分。
1) DesignTime 包
2) 运行时包

为什么要大惊小怪。如果将 RunTime 和 DesignTime 包合并到一个包中会有什么不同?

我从来没有真正理解过这种分离逻辑。

那么这背后的逻辑是什么?

有一次我遇到有人提到,这种区别只是为了避免采用和遵循 Microsoft 制定的组件标准。这背后真的没有逻辑。

这是真的吗?

【问题讨论】:

    标签: delphi runtime packages vcl design-time


    【解决方案1】:

    A.某些组件具有大型且复杂的设计时功能,例如属性编辑器,您可能不想将其包含在运行时应用程序中。

    B.一些组件供应商不想将其大型复杂设计时功能许可用于免版税的运行时使用,而是限制它们仅供开发人员使用。

    【讨论】:

    • A 点:如果说例如 DesignTime 和 RunTime 包被包含在编译的 EXE 中会发生什么?我问这个问题,因为现在内存不再是一个限制,因为在任何给定时间几乎总是有足够的内存可用。我在一定程度上同意 B 点,但对于一个优秀的程序员来说,实现不允许在运行时加载 DesignTime 接口的逻辑将是一项小任务。 COM 组件一直都是这种情况,没有任何问题。
    • 是否使用设计时单位在编译时解决,而不是在运行时解决。包是静态链接的 DLL。因此,使用包使您的目标可执行文件依赖于它们,即。如果找不到所有依赖项,Windows 将无法加载和运行您的可执行文件。
    • 需要的是 Windows 加载和运行可执行文件的方式。或者我不明白你的问题。不管你是否这样认为,包都是静态链接的 DLL。 ;-)
    • 没有静态链接的 DLL,@TOndrej。根据定义,DLL 是动态链接的。 (这就是 D 的含义。)包 DCU 可以静态链接,但它们会包含在 EXE 中,而不是单独包含。操作系统在加载 EXE 时查找的包 DLL 使用所谓的 加载时动态链接,而不是 运行时动态链接,当您使用致电LoadPackage,或者更一般地说,LoadLibrary
    • Embarcadero 是未授权设计时功能的主要组件供应商之一。这就是为什么有时需要设计时包的原因。使用 DesignEditors 单元的组件和属性编辑器不能在不使用 Delphi 自己的设计时包的情况下进行编译,并且该包不允许分发。
    【解决方案2】:

    如果你做了一点研究,你会发现this SO question 在不到 2 天前被问到......

    如前所述,主要原因是您不能在运行时包中包含任何 Delphi 设计单元。而且没有理由用只能在 IDE 中运行的代码来膨胀你的可执行文件。

    【讨论】:

    • 这应该是公认的答案,除了蛇。 :-)
    • 谷歌仍然列出了这个答案,而不是你链接到的那个……责怪谷歌?我的观点是,您可以通过多种方式提出问题。并非所有问题都指向您的页面。
    【解决方案3】:
    1. Designtime 的东西可以使用 Delphi 的 内部单位/包裹,你 既没有源代码也没有 合法允许在 二进制形式。
    2. 你可能不知道 想让你的应用程序需要 Delphi 安装在用户的 电脑。

    逻辑是将您自己的代码与“胶水”代码分开,这使得在 IDE 中使用起来既美观又容易。

    【讨论】:

    • 举例来说,如果我作为 Grid 控件的 VCL 编写者,我想为我的用户提供在运行时对 Grid 布局等进行更改的便利,因为他们可以这样做在设计时,我可以这样做吗?毕竟我必须使用 CG 提供的标准控件并在它们之上进行构建,还是我必须自己从头开始创建 UI?
    • 是的,您可以这样做。设计时是指 Delphi IDE 使用的库。这包括属性编辑器、代码创建向导,简而言之,任何与 IDE 交互的代码。例如,您可以在 IDE 中使用 TStrings 编辑器来编辑 TListBox 的 Items 属性是 designtime。 TListBox 本身不是。如果你想为你的用户提供一个类似的编辑器,让他们在运行时编辑项目,你必须提供你自己的。
    猜你喜欢
    • 1970-01-01
    • 2011-12-10
    • 1970-01-01
    • 1970-01-01
    • 2014-11-04
    • 2012-12-27
    • 2010-10-20
    • 2014-01-04
    • 1970-01-01
    相关资源
    最近更新 更多