仅为某些类启用Delphi XE RTTI

时间:2011-08-26 08:16:38

标签: delphi rtti

我正在尝试仅为我的类的子集启用RTTI。

原因是对于那些我想要RTTI的类,我也想在公共方法上使用RTTI,但如果在项目范围内启用它,那么所有类的所有公共方法都会进入最终的可执行文件。 这基本上关闭了智能链接,因为编译器认为每个公共方法都可以在运行时调用,因此最终编译几乎所有东西,厨房沉入可执行文件......

我尝试了几件事:

  • 使用{$RTTI EXPLICIT METHODS([]) PROPERTIES([]) FIELDS([])}关闭项目级别的RTTI,然后为相关单元重新启用它会导致$ RTTI指令在编译时崩溃(编译器中某处的AV)。
  • 在项目级别关闭RTTI,然后按类编译启用它,但在运行时,在尝试访问暴露类的RTII时,会在“Rtti.pas”中导致不合格的AV
  • 通过嵌入在“.inc”中的$ RTTI指令控制RTTI所有单元在编译时使用随机AV结果(总是在$ RTTI指令的行,但并不总是在同一单元中)。

还有其他想法吗?

1 个答案:

答案 0 :(得分:1)

编译器错误以QC 98261的形式提交给Embarcadero考虑。

运行时AV与属性相关,因此解决方法是确保(手动,没有编译器错误或警告)暴露类中使用的属性都具有RTTI,否则您将获得不合格的运行时AV

只要在单元的“unit”语句之前使用$ emTI指令,就会发生编译器AV,如果你在AV没有发生之后放置它并且它可以工作。