Delphi 如何为整个项目设置$RTTI指令?
我正在将一个旧项目从Delphi2007迁移到Delphi2010。我发现,生成的可执行文件的大小增加了一倍多,而原始文件已经相当大了。(超过50MB。)我怀疑其中很大一部分与扩展RTTI有关 由于该项目早于Delphi2010年,所以它在任何地方都不使用扩展RTTI,我希望保守地将其包括在内。是否有任何方法可以使用“项目选项”对话框将Delphi 如何为整个项目设置$RTTI指令?,delphi,delphi-2010,rtti,Delphi,Delphi 2010,Rtti,我正在将一个旧项目从Delphi2007迁移到Delphi2010。我发现,生成的可执行文件的大小增加了一倍多,而原始文件已经相当大了。(超过50MB。)我怀疑其中很大一部分与扩展RTTI有关 由于该项目早于Delphi2010年,所以它在任何地方都不使用扩展RTTI,我希望保守地将其包括在内。是否有任何方法可以使用“项目选项”对话框将{$RTTI EXPLICIT METHODS([])属性([])字段([])}全局设置为默认值?我本以为在某个地方会有这样一个选项(对于$weakinkrti)
{$RTTI EXPLICIT METHODS([])属性([])字段([])}
全局设置为默认值?我本以为在某个地方会有这样一个选项(对于$weakinkrti
),但我看不到它们
有人知道这是否可以通过“传递给编译器的附加选项”字段或其他方式完成吗?我真的不想在项目中的每个单元都添加一个包含文件,因为有几千个…您可以尝试使用
dcc32–$weakinkrti
命令行选项。(如{$weakinkrti ON}
)。但这并不影响每个单元中的
{$RTTI显式方法([])属性([])字段([])}
。最好将其放在包含文件中每个单元的顶部。
但对于仍然会膨胀的VCL/RTL,它不会这样做
更新:还要确保比较可比的内容。例如,验证是否在新D2010项目的链接器选项中未包含调试信息,而D2007项目中可能没有调试信息…我不知道有这样的选项,但我仍然会使用包含文件 对于任何有经验的Delphi程序员来说,编写一个小程序将
{$I ProjectIncludeFile.inc}
添加到文件夹中的任何单元(在单元行之后立即添加)都不是问题
这样你就可以把它用在任何你喜欢的用途上
我自己使用if.I.设置WriteTempFiles
编译器指令(在开发程序时,我使用f.I.在不同的位置保存stringlist内容),这样我就可以在程序准备部署时在一个位置禁用它
由于我的大多数项目都涉及多个可执行文件和/或dll,因此对于整个项目来说,这是实现全局性的最简单方法。您确定这是由新的RTTI信息引起的吗?虽然数据量很大,但实际上不应该使应用程序的大小增加一倍 检查版本生成可执行文件中是否未包含调试信息。 (项目选项->Delphi编译器->调试信息应为False) 至于这个问题,我在dpr文件中的uses子句之前使用了{$weakinkrti ON},它似乎工作得很好。在回答我的评论时,Mason回答了这个问题 试着把这两行放在最上面 在使用条款之前,您的DPR:
{$WEAKLINKRTTI ON}
{$RTTI EXPLICIT METHODS([]) PROPERTIES([]) FIELDS([])}
这将确保不存在RTTI
为您自己的代码或任何
您使用的第三方库,除非
他们在一个单位里,RTTI
显式启用生成。你
无法为RTL或VCL关闭它,
但这不应该给我们带来太多麻烦
不管怎样,你的尺寸
$RTTI指令的行为自XE6以来已经改变,因为它实际上是一个,因为它应该是当前单元的本地(实际上是)
此外,即使在一个单元中使用该指令也可能会产生致命影响,因为由于该错误,它基本上切换了影响以下单元的全局标志(如编译顺序)。我尝试将
-weakinkrti
放在项目选项中的“传递给编译器的附加选项”字段中,但它只是给出了一个编译器警告:[DCC警告]W1030无效的编译器指令:'-weakinkrti'。对不起,Mason,您必须在项目选项中包含$。我的错。编辑答案。