Delphi2009初体验 - 语言篇 - 反射单元ObjAuto的加强2012-01-30 博客园 杨芹勍一、提出问题在将json-rpc中JSONObject翻译成Delphi代码的时候,我碰到以下语句:
1 Method[] methods = klass.getMethods();
2 …
3 Method method = methods[i];
4 …
5 if (key.length() > 0 &&
6 Character.isUpperCase(key.charAt(0)) &&
7 method.getParameterTypes().length == 0) {
8 …
9 }
10
很明显,这里是通过反射得到类中包含的函数的信息及函数所包含的参数信息。当我在Delphi2009中兴奋的引入ObjAuto文件时,我沮丧的发现,ObjAuto中只提供了GetMethods方法,没有提供类似于Java中getParameterTypes方法的GetParams方法。没关系,Delphi的SDK不提供,我们就根据VMT表,自己写一个GetParams函数出来!二、分析问题我们知道,在Delphi中对象是在堆中存放的。而对象在堆中存放的前四个字节组成一个地址,这个地址指向的是此对象所对应的VMT所在堆中的地址。VMT可以理解为Delphi对象所对应的类在堆中存放的组成形式的描述,它是类的结构,不包含对象的数据。有关VMT的更多信息,请百度一下、Google一下,或查看以下两篇文章:1、Delphi中类的运行期TypeInfo信息结构说明