C++ Builder 利用Rtti访问对象中的字段值
来源:互联网 发布:耐克淘宝旗舰店正吗 编辑:程序博客网 时间:2024/04/30 08:18
在delphi中可以很轻松的利用rtti机制来动态访问对象相关属性的值,在C++Builder如何利用该机制?
在定义C++ Builder类是在需要添加__declspec(delphiclass)或__declspec(delphirtti)宏定义,这样定义就打开了C++的Rtti机制。C++类定义如下:
class __declspec(delphiclass) THeader{
public:
unsigned short HeadStart[4];
unsigned short HeadString[6];
unsigned int Counter;
unsigned short HeadEnd[4];
};
引用该类时需要引用单元中加上#include <Rtti.hpp>头及#pragma explicit_rtti methods(__published, public) properties(__published, public) fields(__published, public, protected, private)
上面定义的THeader类中仅仅定义了四个Public类型字段,若动态访问类中的四个字段需在引用头文件后面至少添加如下内容:
#pragma explicit_rtti fields(public)
具体代码如下:
#include <vcl.h>**
#pragma hdrstop
#include "Unit1.h"
#include <Rtti.hpp>
#pragma explicit_rtti fields(public)//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;//---------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner){}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TRttiContext context; // Get class RTTI
THeader*test=newTHeader;
test->Counter=500;
TRttiType *cls =context.GetType(__delphirtti(THeader));
TRttiField *field = cls->GetField("Counter");
int i=field->GetValue(test).AsInteger();
}
- C++ Builder 利用Rtti访问对象中的字段值
- 利用C++Builder中的IdSMTP和IdMessage控件发送电子邮件
- 使用jni直接访问java对象中的字段
- c++ builder Rtti心得
- C++builder 中的多线程
- 利用C++Builder读写注册表
- 利用C++Builder中的NMSMTP发送电子邮件(能通过邮箱的验证)
- C++Builder中的Variant变量
- C++builder中的内存DC
- C++builder中的队列TQueue
- C++builder 中的接口类
- C++Builder访问USB口的方法
- 利用c++builder设计文件分割机
- 利用c++builder制作仿Oicq菜单
- [C++] 利用 C++ Builder 进行精确计时
- C++builder利用GetPrivateProfileString读取配置文件
- C++Builder 中 Mapx 的对象引用
- c++builder 将Handle句柄转成对象
- android开机启动Service(小发现)
- Impala006-impala 数据处理&impala 和 HBase整合&JDBC方式访问Impala
- spring boot 起步-原型实例
- 第4周项目3单链表应用(1)
- cf#305-D. Mike and Feet- 单调栈/ (线段树上二分)
- C++ Builder 利用Rtti访问对象中的字段值
- 第七周项目(1):建立顺序环形队列算法库
- MVC,MVP 和 MVVM 的图示区别
- 能挣钱的微信JSSDK+H5混合开发
- 第六周 项目3 括号的匹配
- 第四周项目四 建立双链表算法库
- [LeetCode-268] Missing Number(找缺失的数字)
- Linux基础(三)TCP链接数量
- 51nod 1046 A^B Mod C (快速幂)