50分 就解释两行代码 ( 积分: 100 )

  • 主题发起人 主题发起人 siking
  • 开始时间 开始时间
S

siking

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure TForm1.Button1Click(Sender: TObject);
var
p:Pointer;
begin
p:=Self;//???
p:=Pointer(p^);//?????
end;
 
p:=self;//p为Form类指针
p:=Pointer(p^)//返回form1的内存地址
不知对否,请高手!
 
p:=self;//把Self对应的那块区域看成一个指针例如Self如果是个Form,假设该Form(成员变量)占用0x004a9584-0x004a9594的地址空间,此时p就是0x004a9584,而p^就是0x004a9584-0x004a9587这四个字节中存的东西
所以p:=Pointer(p^)//实际上是截取了From的数据区的前四个字节的内容当成指针,这是毫无意义的
 
p:=self;//p为TForm类的 对象指针
p:=Pointer(p^)//返回 前面4字节也就是指向 VMT(虚方法表)指针, 还是有点用的. 可是操作VMT .
 
明白了,谢谢
 
kk2000 正解!!!
对p就行加减操作就是直接操作vmt!!
可以实现对实例里变量的访问什么的,
一般是用汇编访问,比较方便的
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
900
SUNSTONE的Delphi笔记
S
后退
顶部