Как изменить код VCL? - PullRequest
       40

Как изменить код VCL?

3 голосов
/ 29 марта 2012

Мне нужно (чтобы сделать несколько быстрых и грязных тестов), чтобы изменить код Variants и SysUtils.

Что мне нужно сделать, чтобы "скомпилировать" изменения?

Конечно, я могу открыть эти модули в IDE, но если я изменю их и заново создаю проект, я не вижу, что эти модули перекомпилированы.

Что нужно сделать?

Ответы [ 4 ]

7 голосов
/ 29 марта 2012

Проблема в том, что вам нужно будет скомпилировать ВСЕ RTL / VCL для «новых» модулей.

Вместо этого измените копию рассматриваемых модулей и добавьте их в свой проект, если хотите использоватьих.Delphi должен использовать их над RTL / VCL.

4 голосов
/ 29 марта 2012

Если вы не измените часть устройства interface (то есть вы измените только сторону implementation), вы можете создать собственную версию модулей RTL (исключение составляют System.pas и * 1004). *, но это не входит в ваши возможности - см. наш блог , где описаны некоторые улучшения этих модулей).

Вам нужно добавить собственную версию Variants.pas и SysUtils.pas в путь поиска вашего проекта. Они будут приняты во внимание вместо RTL по умолчанию.

Но знайте, что вы можете легко сломать что-нибудь.

Для целей тестирования это нормально, но если вы хотите использовать эти модификации, вам лучше использовать некоторые автоматизированные регрессионные тесты и четко знать, что вы делаете.

Обратите внимание, что вы можете использовать «отладочную» версию модулей RTL (из опций проекта), а затем перейти к отладчику в официальном исходном коде. Это может помочь найти проблемы, не касаясь источника.

Если вы измените часть interface модуля, вам придется перекомпилировать все модули, которые вызывают измененный модуль - для SysUtils и Variants это почти все RTL.

2 голосов
/ 29 марта 2012

Delphi DCU времени выполнения предварительно скомпилированы. Компилировать их при каждой сборке было бы пустой тратой времени.

Если код, который вы пытаетесь изменить, является методом встроенного класса, тогда может помочь помощник класса:

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

Итак, вопрос в том, какую часть кода вы хотите изменить во время выполнения?

0 голосов
/ 31 марта 2012

Если вы действительно хотите перекомпилировать RTL, вы можете сделать это (сначала сделайте резервную копию!). Версии Delphi до Delphi 2010 содержали make-файл в исходной папке, который можно было запустить из командной строки для перестройки rtl / vcl. Я не знаю точно (я все еще использую D2009), но из того, что я слышал, этот файл больше не присутствует в более новых версиях. Надеюсь, есть альтернатива. В противном случае вы бы потратили много времени, пытаясь угадать настройки компилятора для каждого модуля.


Если вы хотите «исправить» ошибку в rtl только для вашего проекта , вы можете скопировать модуль, который вы хотите изменить, в папку вашего проекта и внести изменения. Если изменяемый вами модуль используется в RTL / VCL, вы можете скопировать довольно много зависимых модулей в папку вашего проекта для его компиляции.

Если это значительно замедляет время компиляции для вашего проекта, вы всегда можете выполнить первоначальную компиляцию, а затем удалить «пропатченные» модули, оставив после себя скомпилированный dcus.

...