我想只为我的一部分类启用RTTI。
原因是,对于那些我想要RTTI的类,我也想在公共方法中使用RTTI,但如果在整个项目范围内启用它,那么所有类的所有公共方法都会进入最终的可执行文件。这基本上关闭了智能链接,因为编译器认为每个公共方法都可能在运行时被调用,因此最终会将几乎所有内容编译到可执行文件中...
我尝试过以下几种方法:
- 使用
{$RTTI EXPLICIT METHODS([]) PROPERTIES([]) FIELDS([])}
在项目级别上关闭RTTI,然后重新为相关单元启用它,结果导致编译时崩溃(编译器某处发生AV)。 - 在项目级别上关闭RTTI,然后逐个启用它,可以编译通过,但在运行时,当尝试访问公开类的RTII时,会导致“Rtti.pas”中深度不明确的AV错误。
- 通过嵌入在所有单元使用的“.inc”中的$RTTI指令来控制RTTI会导致随机的编译时AV错误(始终在$RTTI指令的行处,但不总是针对相同的单元)。
还有其他想法吗?