我正在尝试仅为我的类的子集启用RTTI。
原因是对于那些我想要RTTI的类,我也想在公共方法上使用RTTI,但如果在项目范围内启用它,那么所有类的所有公共方法都会进入最终的可执行文件。 这基本上关闭了智能链接,因为编译器认为每个公共方法都可以在运行时调用,因此最终编译几乎所有东西,厨房沉入可执行文件......
我尝试了几件事:
{$RTTI EXPLICIT METHODS([]) PROPERTIES([]) FIELDS([])}
关闭项目级别的RTTI,然后为相关单元重新启用它会导致$ RTTI指令在编译时崩溃(编译器中某处的AV)。还有其他想法吗?
答案 0 :(得分:1)
编译器错误以QC 98261的形式提交给Embarcadero考虑。
运行时AV与属性相关,因此解决方法是确保(手动,没有编译器错误或警告)暴露类中使用的属性都具有RTTI,否则您将获得不合格的运行时AV
只要在单元的“unit”语句之前使用$ emTI指令,就会发生编译器AV,如果你在AV没有发生之后放置它并且它可以工作。