我需要(进行一些快速和肮脏的测试)来修改Variants
和SysUtils
的代码。
我需要做些什么才能“编译”这些更改?
我当然可以在IDE中打开这些单元,但如果我更改它们并再次执行一个项目,我就不会重新编译这些单元。
需要做什么?
答案 0 :(得分:7)
问题是您需要针对“新”单元编译所有RTL / VCL。
而是修改相关单位的副本,并在您想要使用它们时将它们添加到项目中。 Delphi应该使用它们而不是RTL / VCL中的那些。
答案 1 :(得分:4)
除非您不更改单元的interface
部分(即,您只修改implementation
侧),否则您可以创建自己的RTL单元版本(唯一的例外是{{ 1}}和System.pas
,但这不在您的范围内 - 有关这些单元的某些增强功能,请参阅our blog site。
您需要将自己的SysInit.pas
和Variants.pas
版本放在项目的搜索路径中。它们将被考虑在内而不是默认的RTL。
但要注意,你可能很容易破坏任何东西。
出于测试目的,这是可以的,但是如果你想使用这些修改,你应该更好地使用一些自动回归测试,并明确知道你在做什么。
请注意,您可以使用RTL单元的“调试”版本(来自项目选项),然后在官方源代码中使用调试器。它可能有助于在不触及来源的情况下找到问题。
如果更改单元的SysUtils.pas
部分,则必须重新编译调用修改单元的所有单元 - 对于SysUtils和Variants,这几乎都是RTL。
答案 2 :(得分:2)
Delphi运行时DCU是预编译的。在每次构建时编译它们都是浪费时间。
如果您尝试修改的代码是内置类的方法,那么类帮助程序可能有所帮助:
http://docwiki.embarcadero.com/RADStudio/en/Class_and_Record_Helpers
所以问题是你想在运行时修改哪部分代码?
答案 3 :(得分:0)
如果你真的想重新编译RTL,你可以这样做(先备份!)。 Delphi 2010之前的Delphi版本在源文件夹中有一个makefile,可以从命令行运行以重建rtl / vcl。我不确定(我还在使用D2009),但据我所知,这个文件不再出现在新版本中。希望有另一种选择。否则你最终会浪费很多时间来猜测每个单元的编译器设置。
如果您希望“修补”仅用于项目的rtl 中的错误,您可以将要修改的单位复制到项目的文件夹中并进行更改。如果您在整个RTL / VCL中使用修改的单元,您可能会发现自己将很多相关单元复制到项目文件夹中以便进行编译。
如果这显着减慢了项目的编译时间,你可以随时进行初始编译,然后删除“修补”单元,留下编译后的dcus。