高手进!(50分)

J

jinmen

Unregistered / Unconfirmed
GUEST, unregistred user!
最近对delphi的源程序感兴趣,研究TObject类,下面的语法看不太懂
class function TObject.ClassParent: TClass;
{$IFDEF PUREPASCAL}
begin
Pointer(Result) := PPointer(Integer(Self) + vmtParent)^;
if Result <> nil then
Pointer(Result) := PPointer(Result)^;
end;
{$ELSE}
。。。 后面是汇编,不用管。
这是一个通过VMT得到对象父类的函数,不过Pointer和PPointer到底是什么意思啊。
50分只给一人,谁最先让我明白分就给谁了。如果满意可以加。
 
Delphi对类的表示是一个指向虚方法的只读指针表以及有关类的信息,类引用是指向表的指针。
Result是一个TClass类型的,PPointer是指向指针类型的指针,这样,通过Self(它实际上是
一个指针,指向虚方法表)和一个相对于虚方法表的偏移(vmtParent)就可以得到父类的指针
由于Pointer类型不能直接运算,所以把它转换为Integer型进行计算。这个计算的结果是一个
指向父类的指针,也就是一个指向指针的指针。那么考虑到赋值类型相容,
Pointer(Result) := PPointer(Integer(Self) + vmtParent)^;
这样, 得到了一个指向父类的指针Result, 然后, 它指的内容就是父类了
if Result <> nil then
Pointer(Result) := PPointer(Result)^;
这时Result就是一个TClass类型的

对于Delphi的对象模型,参考电力出版社的Delphi技术手册
 
接受答案了.
 
顶部