请教Delphi大牛,Delphi的RTTI可以获取到某个类的所有属性\方法\过程吗? 请教Delphi大牛,Delphi的RTTI可以获取到某个类的所有属性\方法\过程吗?就是只给出这个类的一个实例,然后通过枚举的方式,将所有方法\属性\过程都枚举出来,听说Delphi的RTTI只对published域的过程有效,有什么办法能绕过去吗,给个思路也好啊`谢谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 估计星期六日高手都去HAPPY去了...明天再来.. 的确,只有published域有RTTI在运行期得到全部属性、成员的可能性不太大,“正常”的办法应该是没有,因为这违反OO的封装原则 终于有人了现有这个声明TMyMethod = function(A: array of Char; var B: TObject): Integer of object;我用GetTypeData可以返回这个原型的信息,但网上说delphi的rtti只对pubshlied有效,那为为什么能取到呢?还有就是TypeInfo为啥不能传个TForm1.Create进去?我是想拿到TForm1.Create的信息 嘿嘿`我找到了,通过那些虚表以后的一些地址,能拿到所有字段和方法的首地址,这样的话,其实Delphi的所有类对象都具有RTTI的功能了,不知道官方说什么说继承于TPrexxx这个类才具有RTTI. 晕..原来vmtMethodTable只对pubshlied域有效...........我日.. oh?vmtMethodTable对全部都有效吧,我试过的。RTTI对published有效。 Harryfin(Harry) 这位兄弟此话当真???我没去试``今晚回去试试```brightyang(伊莎贝尔)你也是指vmtMethodTable这个方法来获取? 关注请教一下:vmtMethodTable是记虚方法的,跟RTTI的实现有什么关系吗?toHarryfin(Harry)vmtMethodTable对全部都有效吧,你说的是做什么操作全部都有效呢? vmtSelfPtr = -76; vmtIntfTable = -72; vmtAutoTable = -68; vmtInitTable = -64; vmtTypeInfo = -60; vmtFieldTable = -56; vmtMethodTable = -52; vmtDynamicTable = -48; vmtClassName = -44; vmtInstanceSize = -40; vmtParent = -36; vmtSafeCallException = -32 deprecated; // don't use these constants. vmtAfterConstruction = -28 deprecated; // use VMTOFFSET in asm code instead vmtBeforeDestruction = -24 deprecated; vmtDispatch = -20 deprecated; vmtDefaultHandler = -16 deprecated; vmtNewInstance = -12 deprecated; vmtFreeInstance = -8 deprecated; vmtDestroy = -4 deprecated; vmtQueryInterface = 0 deprecated; vmtAddRef = 4 deprecated; vmtRelease = 8 deprecated; vmtCreateObject = 12 deprecated;看上面,有了这些值,就能获取到任意类对象的所有方法\属性\动态表\等等信息了嘛,有了反射的基本功能,但是对于动态创建之类的,在delphi里是不是所有对象都支持```全部就是指private\protected\public\pubshlied这些域的方法\属性有效 在Types单元里,自己找吧,都是些未公开的函数,一般可以满足要求了 可以参考一下:http://blog.yd153.com/user1/wyattwriy/archives/2007/200.html toHarryfin(Harry)vmtMethodTable对全部都有效吧,你说的是做什么操作全部都有效呢?类的成员方法 -_- dxdbgrid中显示的记录 一条皮带引起的血案,掀起D版水区的新一轮灌水狂潮,现场直播。 晕了,关于字符串拆分的问题~~~ 请问怎样将自定义的Record保存到SQL Server 用MSCOMM控件写成DLL,串口通信,在线等急!! 高手请帮忙啊(在线等待) 为什么Delphi7中没有NMUDP,怎样可以安装NMUDP. sinA*cosA=0.2,解方程求助,再线等待,帮帮忙 十万火急,高手救命! 有没有如何所说的控件? ◎◎◎ 问几个关于SPComm的问题! 请教delphi多线程技术监控多个串口
“正常”的办法应该是没有,因为这违反OO的封装原则
现有这个声明
TMyMethod = function(A: array of Char; var B: TObject): Integer of object;我用GetTypeData可以返回这个原型的信息,但网上说delphi的rtti只对pubshlied有效,那为为什么能取到呢?还有就是TypeInfo为啥不能传个TForm1.Create进去?我是想拿到TForm1.Create的信息
请教一下:vmtMethodTable是记虚方法的,跟RTTI的实现有什么关系吗?to
Harryfin(Harry)
vmtMethodTable对全部都有效吧,你说的是做什么操作全部都有效呢?
vmtIntfTable = -72;
vmtAutoTable = -68;
vmtInitTable = -64;
vmtTypeInfo = -60;
vmtFieldTable = -56;
vmtMethodTable = -52;
vmtDynamicTable = -48;
vmtClassName = -44;
vmtInstanceSize = -40;
vmtParent = -36;
vmtSafeCallException = -32 deprecated; // don't use these constants.
vmtAfterConstruction = -28 deprecated; // use VMTOFFSET in asm code instead
vmtBeforeDestruction = -24 deprecated;
vmtDispatch = -20 deprecated;
vmtDefaultHandler = -16 deprecated;
vmtNewInstance = -12 deprecated;
vmtFreeInstance = -8 deprecated;
vmtDestroy = -4 deprecated; vmtQueryInterface = 0 deprecated;
vmtAddRef = 4 deprecated;
vmtRelease = 8 deprecated;
vmtCreateObject = 12 deprecated;看上面,有了这些值,就能获取到任意类对象的所有方法\属性\动态表\等等信息了嘛,有了反射的基本功能,但是对于动态创建之类的,在delphi里是不是所有对象都支持```全部就是指private\protected\public\pubshlied这些域的方法\属性有效
http://blog.yd153.com/user1/wyattwriy/archives/2007/200.html
Harryfin(Harry)
vmtMethodTable对全部都有效吧,你说的是做什么操作全部都有效呢?类的成员方法 -_-