找到办法了 var P:Pointer; begin P := Pointer(integer(Obj) + 4); ZeroMemory(P,Obj.InstanceSize - 4);这样子就OK了,我试了没问题。 理由是,delphi里对象存储是头4个字节是虚方法表VMT,再往下才是其成员数据,因此,要清空对象的数据,起始位置是对象的地址偏移4个字节,大小是对象的大小-4
看看李维的<INDIDE VCL FRAME> p46 line 7....Object Pascal的对象模型会先初始化所有的内存内容为0. FillChar(Instance^ ,InstanceSize, 0);
<Inside VCL FrameWork>
看看李维的<INDIDE VCL FRAME> p46 line 7 =========================================================================== 老弟连页码行数都记得啊,不简单,哈哈
----------
用了这个后,访问类的成员会出错
==================================================================================
都清0当然会出错,我是按搂住要求给的,是符合题意的.Free了就更出错哈,哈
var
P:Pointer;
begin
P := Pointer(integer(Obj) + 4);
ZeroMemory(P,Obj.InstanceSize - 4);这样子就OK了,我试了没问题。
理由是,delphi里对象存储是头4个字节是虚方法表VMT,再往下才是其成员数据,因此,要清空对象的数据,起始位置是对象的地址偏移4个字节,大小是对象的大小-4
FillChar(Instance^ ,InstanceSize, 0);
===========================================================================
老弟连页码行数都记得啊,不简单,哈哈
试了InitInstance方法,也是可以的。
不过用这个方法初始化对象时,又把虚方法表建一遍,那倒没必要了。上面的方法应该就够用了。