通过删除RTTI缩小exe

时间:2010-10-26 15:11:04

标签: delphi rtti

在这个问题(link)中,有人说下面的行(每个单位)会删除尽可能多的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 个答案:

答案 0 :(得分:5)

确保将“{$ RTTI”行放在“unit unit1”下方线。

请注意as of XE5 and newer, this directive needs to be in each individual unit for which you want to disable RTTI.在此之前(如在评论中,仅适用于XE4及以下),它可以在DPR文件中,并将应用于项目中的所有单位。

答案 1 :(得分:2)

新的RTTI适用于Delphi 2010及更高版本。

它可以删除,但是很多东西的功能有限(比如JSON转换,DataSnap的一部分以及许多做ORM或其他映射的新的第三方库)。

依赖于TValue的事情无论如何都消失了。

“旧式”RTTI(在Delphi 1中引入并且仍然存在于Delphi 2010中)无法删除。

所以:建议仅从您自己的单位删除RTTI,而不是从RTL和VCL删除。

- 的Jeroen