在Delphi中对运行时和设计时包进行大惊小怪

Yog*_*007 7 delphi vcl design-time packages runtime

我已经看到Delphi中的大多数组件(VCL)分为两部分.
1)DesignTime包
2)RunTime包

为什么这么大惊小怪.如果将RunTime和DesignTime包合并为一个包,它会有什么不同?

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

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

有人说,有人提到这种区别只是为了避免采用和遵循微软制定的组件标准.真的,这背后没有逻辑.

这是真的?

fro*_*ogb 12

答:某些组件具有大而复杂的设计时功能,例如属性编辑器,您可能不希望在运行时应用程序中包含这些功能.

B.一些组件供应商不希望为免版税的运行时使用许可其大型复杂的设计时功能,但仅限开发人员使用它们.

  • 是否使用设计时单元在编译时解决,而不是在运行时解析.包是静态链接的DLL.因此,使用包使您的目标可执行文件依赖于它们,即.如果找不到所有依赖项,Windows将无法加载和运行您的可执行文件. (2认同)
  • 需要的是Windows加载和运行可执行文件的方式.或许我不明白你的问题.包是静态链接的DLL,无论你是否这么认为.;-) (2认同)
  • 没有像静态链接的DLL这样的东西@TOndrej。根据定义,DLL是动态链接的。(这就是* D *代表的意思。)包DCU可以静态链接,但是它们却包含在EXE中,而不是单独包含。操作系统在加载EXE时查找的程序包DLL使用的是“加载时动态链接”,而不是“运行时动态链接”,运行时动态链接是在您调用“ LoadPackage”或更普遍的情况下发生的情况。 LoadLibrary`。 (2认同)
  • 不授权设计时功能的主要组件供应商之一是**Embarcadero**.这就是有时需要设计时包的原因.如果不使用Delphi自己的设计时包,则无法编译使用*DesignEditors*单元的组件和属性编辑器,并且不允许分发该包. (2认同)

Fra*_*ois 5

如果你做了一些研究,你会在不到两天前发现这个问题 ...

如前所述,主要原因是您不能在运行时包中包含任何Delphi Design单元.并且没有理由使用只能在IDE中运行的代码来破坏可执行文件.

  • 这应该是公认的答案,除了警告之外。:-) (3认同)