运用delphiXE RTTI在运行时动态获取信息及获取某个TComponent类或TObject类的RttiType信息的案例
一、理解RTTI
先看看官方文档:http://docwiki.embarcadero.com/RADStudio/Rio/en/Working_with_RTTI 译文如下:
运行时类型信息(RTTI)是一种编程模式,其中可以在运行时获取有关类型的信息。如果启用了RTTI生成,则生成的二进制文件将包含特殊的元数据,该元数据包含有关类型的信息(例如,类的祖先class ancestry,声明的字段declared fields,带注释的属性annotated attributes【我加的:包含类的字段、属性、函数、过程,包括已发布的,公共的,受保护的,私有的】)。使用System.Rtti单元中提供的功能,您可以在运行时获取这些信息。最终结果是能够创建抽象和通用的框架,在其中可以操作任何公开的RTTI类型。
注意:RTTI是Delphi开发工具的特有的 。
注意:不会为泛型方法生成运行时类型信息。
我加的:Delphi将RTTI信息根植到编译后链接的包信息(链接产生的二进制文件,它被链接到.exe可执行文件中( Windows)、.jar( Android)、.静态文件.a.h( IOS))表中System.PackageInfoTable,运行时是去读取该表。注意:在iOS平台上,链接是静态完成的,因此不会植根RTTI。但是,如果使用GetType方法,则可以获取RTTI
RTTI生成的控制
使用以下编译器指令来控制运行时类型信息的生成。您可能需要限制RTTI的生成以减小可执行文件的大小。
| Delphi | C ++ |
|---|---|
| {$ M},{$ TYPEINFO} | __declspec(delphirtti) |
| {$ METHODINFO} | 不适用 |
| {$ RTTI} | #pragmaexplicit_rtti |
| {$ WEAKLINKRTTI} | 不适用 |

本文介绍如何使用DelphiXER的RTTI在运行时动态获取类信息,包括TComponent和TObject类的详细元数据,如方法、属性和字段。通过案例演示,展示如何在VCL和Fmx中跨平台使用RTTI,提高代码的灵活性和可维护性。
最低0.47元/天 解锁文章
949

被折叠的 条评论
为什么被折叠?



