我渴望尝试修改Delphi运行时库(RTL)中的底层内容,例如system.pas
等...这是可能的吗?
我非常喜欢像“是的,但是您需要提供一些汇编巫术的自定义.obj文件,因为它们从未与官方Delphi源代码一起分发”这样的挑战。对我来说没问题,我只是想知道。
我想在Delphi 7中进行这个实验,但其他版本的内部信息也可以。这是和一家从石器时代就使用Delphi的公司在一起的好处之一。
(我一直认为这是一个RTFM问题,答案是坚定的“NO!”,但由于某种原因,谷歌无法确认。)
我渴望尝试修改Delphi运行时库(RTL)中的底层内容,例如system.pas
等...这是可能的吗?
我非常喜欢像“是的,但是您需要提供一些汇编巫术的自定义.obj文件,因为它们从未与官方Delphi源代码一起分发”这样的挑战。对我来说没问题,我只是想知道。
我想在Delphi 7中进行这个实验,但其他版本的内部信息也可以。这是和一家从石器时代就使用Delphi的公司在一起的好处之一。
(我一直认为这是一个RTFM问题,答案是坚定的“NO!”,但由于某种原因,谷歌无法确认。)
del *.dcu /s
"c:\program files\borland\delphi7\bin\dcc32.exe" -O+ -Q -M -Y -Z -$D+ System.pas
这将重新编译System.pas和SysInit.pas(两个最底层的RTL文件)。
但是,为了使用您重新创建的dcu文件,您必须将包含更新的dcu文件的文件夹放在IDE的第一位置:例如,在Delphi 7中,它是Option / Environment Options / Library,然后在“Libary path”和“Browsing path”字段中将您的文件夹FIRST放在第一位。
也许值得删除Delphi安装目录中原始的.dcu文件。
但请确保不要更改单元的“interface”部分,否则您将在与RTL(或第三方组件)未修改的单位编译时遇到麻烦。您可以更改“implementation”部分,应用修复程序或重写某些部分以提高速度等,但不要更改“interface”部分以避免任何链接错误。
始终备份您正在更改的原始.pas和.dcu文件。建议进行一些自动化编译测试,以确保您对RTL的修改不会添加任何回归。
我们为我们的Enhanced Run Time Library进行了这样的RTL重新编译,以提高低级RTL函数(主要是System.pas和SysUtils.pas)的速度。设计用于Delphi 7和2007。对于更近期的Delphi版本,您仍然可以使用相同的原则。
您只能从命令行重新编译RTL。在您的安装中,RTL源目录中应该有一个makefile。它被设计为与make.exe命令行实用程序一起使用,后者应该位于您的安装的“bin”文件夹中。我建议将相关源代码复制到单独的位置进行实验。但是,我必须警告您,System单元紧密耦合于编译器,该编译器期望许多函数具有特定名称并具有特定的参数列表(如果有任何声明)。许多RTL“帮助器”函数没有正式声明的参数,但是会以特定方式传递参数。
另一个需要注意的问题是更改某些类、函数或类型的接口声明。这样做可能会导致现有DCU文件和组件出现严重的不兼容性。因此,在混合包含的RTL或第三方组件的DCU文件与您的自定义修改版本时,必须非常小心。我建议您先只进行实现部分的更改,然后再冒着破坏接口的风险进行更改。