仅为某些类启用Delphi XE RTTI

Eri*_*nge 9 delphi rtti

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

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

我尝试了几件事:

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

还有其他想法吗?

Eri*_*nge 1

编译器错误作为 QC 98261 提交以供 Embarcadero 考虑。

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

只要在单元的“unit”语句之前使用 $RTTI 指令,编译器 AV 就会发生,如果将其放置在 AV 不发生且有效之后。