如何重新编译Delphi XE7运行时

约翰·麦克

我计划修改某些源(即在... \ Embarcadero \ Studio \ 15.0 \ source中)以修复一些错误。如何编译它们,以便可以更新... \ Embarcadero \ Studio \ 15.0 \ lib中的内容?

德尔蒂奇

可以重新编译Delphi随附的源,但是不能随产品一起提供DCU(预编译的二进制文件)。DCU格式特别包含一个标记,以指示不应用源的重新编译来替换DCU。仅针对产品随附的DCU设置此标记(我不知道有任何机制可以在您自己的设备中设置此标记)。

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

还在我这儿 ?好的。:)

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

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

但是,尽管如此,仍然可以进行选择性更改。

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

但是,您必须确保遵守黄金法则,即您所做的任何更改都不能也不得修改所涉及单元的接口部分

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

但是只要您遵守此规则并且仅对单元实现部分进行更改,那么您就可以了。即使在这些限制条件下,这也应有足够的余地来修复您所想到的某些错误。

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

运行时重新编译组

如何在`lein repl`运行时重新编译并重新加载Java源代码?

我如何在运行时修改/重新编译已经定义的函数

运行时检查失败#0,用于运行时重新编译

是否可以从IDE内部运行Delphi EXE而无需重新编译它?

如何避免每次重新编译使用的运行时软件包时都重新安装已安装的软件包?

在可执行文件运行时重新编译是否安全?

XE7链接运行时程序包问题

使用Delphi XE7并行库

Delphi XE7智能指针

文字提示Delphi XE7

Delphi XE7 Android Indy IRC

在Delphi XE7 Android中的Messagedlg

Delphi XE7 XML文档

Delphi XE7:TEdit TextHint颜色

使用-Xlint:unchecked重新编译我的代码。使用-Xlint重新编译后,出现unchecked的呼叫警告。我现在如何运行程序?

修改golang网站代码后如何重新编译和运行,基于makefile的项目构建

如何强制MSBuild在不重新编译的情况下运行代码分析

更改grails时,如何使grails运行应用程序重新编译文件?

Golang:如何在不重新编译的情况下反复运行“测试”?

如何重新编译C#程序以在ARM CPU上运行?

网站重新编译后,IIS中已经在运行的线程会如何处理?

如何更改Delphi XE7的IDE语言

Delphi XE2在运行时不考虑组件属性

Delphi XE 6 FMX TreeListVew文本margin.left导致运行时错误

Intelij:在运行应用程序时重新编译?

运行GitlabCI目标,而无需在每个阶段重新编译

存储过程停止运行但重新编译修复它

Delphi XE7在关机时崩溃