【问题标题】:Shrinking exe by removing RTTI通过删除 RTTI 缩小 exe
【发布时间】:2010-10-26 15:11:04
【问题描述】:

在这个问题 (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

【问题讨论】:

  • 我以前没有看到过这个错误,但你不需要在每个单元中都添加那行。只需将其放在 DPR 的顶部,uses 子句之前。
  • 这是 2010 年,我们是否仍然担心我们的可执行文件的大小?我以为我们早在 1998 年就完成了?
  • Lasse:我同意:担心可执行文件的大小似乎过时了。但是,我们的利基产品是以 CD 形式提供的。 CD 没有足够的空间来容纳相当大的 EXE 所需的增长...
  • 您是否尝试将此行添加到新创建的(和空的)Delphi 应用程序中?
  • @Robert:虽然有很多用户同时阅读 Embarcadero 论坛和 StackOverflow,但也有很多用户不经常阅读。所以也在那里问,限制你得到答案的机会是没有意义的。另外,在 StackOverflow 和 Embarcadero 论坛上询问时,我不会考虑交叉发帖,因为这两者除了都是人们帮助他人的社区之外,彼此没有任何关系。

标签: delphi rtti


【解决方案1】:

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

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

【讨论】:

  • 处理建议让我发现只有在包含文件中的行才会失败。将行放入 .dpr(谢谢,梅森!)本身就解决了这个问题。 Exe 大小从 35 兆增加到 32 兆。当我们尝试将我们的应用程序硬塞到 CD 上时,这很有帮助。 @Remy:感谢 DVD 的建议。我们担心的是,许多客户正在运行没有 DVD 的旧机器! :-( 谢谢大家的帮助!
  • @Robert:请在qc.embarcadero.com 提交一个错误。或者发给我一个小示例项目(任何以我在 pluimers dot com 的名字开头的项目都可以)。
  • 进一步评论:有时会因 F2084 失败:内部错误:AV06B5E814-R00000010-0
  • 哇... 35 MB 可执行文件?您是否考虑过使用软件包和/或 exe 压缩实用程序?两者都可以显着降低磁盘需求。
【解决方案2】:

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

它可以被删除,但是很多东西的功能都会受到限制(比如 JSON 转换、DataSnap 的一部分以及许多新的执行 ORM 或其他映射的第三方库)。

无论如何,依赖于 TValue 的东西都消失了。

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

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

--杰罗恩

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-28
    • 1970-01-01
    相关资源
    最近更新 更多