2010-10-26 2 views
4

В этом вопросе (link) было сказано, что линия ниже (в каждый блока) будет удалить столько RTTI, как это возможно:Уменьшая ех путем удаления RTTI

{$RTTI EXPLICIT METHODS([]) PROPERTIES([]) FIELDS([])} 

Проводка не упомянула, что Delphi, с которой он работает, но я предполагаю, что D2010. Однако, когда я включаю строку выше, я получаю эту ошибку:

DCC Fatal Error: E2158 System unit out of date or corrupted: 
    missing TVisibilityClasses. 

Я использую «запас» версию D2010 и никогда ничего такого, что я знаю, сделал из этого изменит установку по умолчанию или библиотек.

Любые предложения? TIA

Связанный вопрос: link.

+2

Я не видел эту ошибку раньше, но вам не нужно вводить эту строку в каждую единицу. Просто поставьте его в верхней части вашего DPR, перед предложением 'uses'. –

+3

Это 2010, мы все еще обеспокоены размером наших исполняемых файлов? Я думал, что мы закончили с этим, в 1998 году? –

+2

Lasse: Я согласен: кажется архаичным беспокоиться о размере исполняемых файлов. Однако наш нишевый продукт поставляется на CD. На компакт-диске недостаточно свободного места, чтобы обеспечить рост, который требуется значительно большему EXE ... – RobertFrank

ответ

5

Убедитесь, что вы положили "{$ RTTI" строку ниже "блок группы1;" линия.

Заметим, что as of XE5 and newer, this directive needs to be in each individual unit for which you want to disable RTTI. До этого (как в комментариях, которые применяются только к XE4 и ниже) он может быть в файле DPR и применяться ко всем единицам проекта.

+3

Работа с предложением привела меня к выводу, что строка выходит из строя, только если она включена в файл include. Ввод строки в .dpr (спасибо, Мейсон!) Сам устранил проблему. Размер Exe - от 35 до 32 мегабайт. Это полезно, поскольку мы пытаемся выполнить привязку нашего приложения на компакт-диске. @Remy: спасибо за предложение DVD. Наша забота заключается в том, что многие клиенты работают на старых компьютерах, у которых нет DVD-дисков! :-(Спасибо всем за помощь! – RobertFrank

+0

@Robert: напишите об ошибке на http://qc.embarcadero.com или отправьте мне небольшой примерный проект (все, начиная с моего имени на pluimers dot com, будет делать) –

+0

Еще один комментарий: иногда это сбой с F2084: Внутренняя ошибка: AV06B5E814-R00000010-0 – RobertFrank

2

Новый RTTI предназначен для Delphi 2010 и выше.

Его можно удалить, но тогда многие вещи будут иметь ограниченную функциональность (например, преобразование JSON, часть DataSnap и многие из более новых сторонних библиотек, которые выполняют ORM или другие сопоставления).

Вещи в зависимости от TValue в любом случае ушли.

«старый стиль» RTTI (который был представлен в Delphi 1 и все еще присутствует в Delphi 2010) не может быть удален.

Итак: рекомендуется удалять RTTI только из ваших собственных устройств, а не из RTL и VCL.

--jeroen

Смежные вопросы