How to change VCL code?

后端 未结 4 1288
时光说笑
时光说笑 2021-01-13 10:38

I need (to make some quick and dirty tests) to modify the code of Variants and SysUtils.

What I need to do to \"compile\" the changes?

相关标签:
4条回答
  • 2021-01-13 11:14

    The problem is you would need to compile ALL of the RTL/VCL against the 'new' units.

    Instead modify a copy of the units in question and add them to your project when you want to use them. Delphi should use these over those in the RTL/VCL.

    0 讨论(0)
  • 2021-01-13 11:17

    Delphi runtime DCUs are precompiled. It would be a waste of time to compile them at every build.

    If the code you are trying to modify is a method of a built-in class, then a class helper may help:

    http://docwiki.embarcadero.com/RADStudio/en/Class_and_Record_Helpers

    So the question is which part of code do you want to modify in the runtime?

    0 讨论(0)
  • 2021-01-13 11:20

    If you really wish to recompile the RTL you can do so (Make a backup first!). Versions of Delphi prior to Delphi 2010 had a makefile in the source folder that could be run from the command line to rebuild the rtl/vcl. I don't know for sure (I'm still using D2009) but from what I've heard this file is no longer present in newer versions. Hopefully there is an alternative. Otherwise you would wind up wasting a lot of time trying to guess that the compiler settings for each unit.


    If you wish to "patch" a bug in the rtl for your project only you can copy the unit you want to modify into your project's folder and make your change. If the unit your modifying is used throughout the RTL/VCL you may find yourself copying quite a few dependent units into your project folder in order for it to compile.

    If this significantly slows down the compile time for your project you can always do your initial compile then remove the "patched" units, leaving behind the compiled dcus.

    0 讨论(0)
  • 2021-01-13 11:24

    Unless you do not change the interface part of the unit (that is, you only modify the implementation side), you can make your own version of the RTL units (only exception is System.pas and SysInit.pas, but this is not in your scope - see our blog site for some enhancements of those units).

    What you need is to put your own version of Variants.pas and SysUtils.pas in the search path of your project. They will be taken in account instead of the default RTL.

    But be aware that you may easily break anything.

    For testing purpose, this is OK, but if you want to use those modifications, you shall better use some automated regression tests, and know explicitly what you are doing.

    Please note that you can use the "debug" version of the RTL units (from the project options), then step with the debugger within the official source code. It may help finding issues without touching the source.

    If you change the interface part of the unit, you'll have to recompile all units which call the modified unit - for SysUtils and Variants, this is almost all RTL.

    0 讨论(0)
提交回复
热议问题