如何重新编译Delphi XE7运行时

时间:2014-12-18 00:34:04

标签: delphi delphi-xe7

我打算修改一些来源(例如...... \ Embarcadero \ Studio \ 15.0 \ source)来修复一些错误。如何编译它们以便我可以更新...... \ Embarcadero \ Studio \ 15.0 \ lib中的内容?

1 个答案:

答案 0 :(得分:13)

Delphi提供的源代码可以重新编译,但产品附带的DCU(预编译的二进制文件)不能重新编译。 DCU格式具体包括一个标记,用于指示不应该通过重新编译源来替换DCU。此标记仅针对产品随附的DCU设置(我不知道在您自己的单位中设置此标记的任何机制)。

这就是为什么有两组DCU - 一组用于DEBUG,一组用于非调试版本。这就是为什么你有一个项目选项专门控制你的项目与哪个DCU链接。根据您当时的编译器设置,您自己的单元可以使用或不使用调试信息进行编译。但是提供的RTL / VCL单元不会重新编译,因此您必须选择是否使用预编译的DEBUG或不使用DEBUG。

还在我身边吗?好。 :)

您无法重新编译RTL / VCL单元的原因是这样做会带来严重的风险。包含设计时组件(也随产品一起提供)的软件包显然是使用特定版本的源(产品附带的)编译的,如果要更改这些软件包,那么软件包内容将不再与源代码相对应在磁盘上,调试可能很困难。

此外,即使允许,也意味着您将通过修改源来限制您可以实现的目标。例如,您不能引入新的(或删除现有的)已发布属性或更改现有属性的声明类型,这样做几乎肯定会破坏包含所涉及组件的现有表单文件的持久性。

然而,尽管如此,仍然可以做出有选择的改变。

诀窍是强制您的项目使用您希望修改的RTL / VCL单元的副本进行编译。实现这一目标的最简单方法是将该单元的副本放在与DPR相同的位置。然而,更可靠的方法是保留一个单独的特定文件夹,其中包含您可以修改的所有这些单元,并将此文件夹添加到IDE或特定项目的搜索路径中。

您必须确保遵守黄金法则,但您所做的任何更改都不能也不得修改相关单位的界面部分

如果您这样做,那么当您尝试编译项目时,您会发现其他未经修改的单元将拒绝链接到已修改的单元。

但是只要您遵守此规则并且仅对单元的实现部分进行更改,那么您应该没问题。即使在这些限制条件下,这应该允许足够的范围来修复您想到的一些错误。

当然,您还必须使用更复杂的构建环境,并可能处理合并后续版本的RTL / VCL单元的修订版本,这些版本会在Delphi的新版本可用时修改。在您的情况下,这是否值得,实际上取决于您打算处理的错误有多严重。您可能会发现通过解决这些错误来处理这些错误更容易,而不是尝试直接修复它们(如果可能的话)。