delphi2007 教程

delphi2007 教程

首页 新随笔 联系 聚合 管理
  1013 Posts :: 0 Stories :: 28 Comments :: 0 Trackbacks
对象有没有类似于ZeroMemory的方法? Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiBase/html/delphi_20061205174106281.html
把对象所包含的所有数据清零。  
  之前以为是CleanupInstance,但试了一下,不对。

没有

这么直接呀。。。  
  再考虑考虑?

有!  
   
  Object.free;

然后Object就==   nil了     呵

FillChar(Object,   szieof(Object),   0);

FillChar(Object,   szieof(Object),   0);  
  ----------  
  用了这个后,访问类的成员会出错

把对象所包含的所有数据清零。  
  ==================================================================================  
  都清0当然会出错,我是按搂住要求给的,是符合题意的.Free了就更出错哈,哈

补充,可以说,真正满足楼主要求的,可能就是FillChar,谁还有更直接的方法???

找到办法了  
  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  
  ===========================================================================  
  老弟连页码行数都记得啊,不简单,哈哈

大哥好.不好意思.我的手边就是这本书.反复阅读着呢.

我给你发了个短信,准备潜水了,可能很长时间来不了了

delphi对象创建后,所有内存都为0,这个我知道。我就是想让对象在已经有了数据情况下,清空所有数据。  
  试了InitInstance方法,也是可以的。  
  不过用这个方法初始化对象时,又把虚方法表建一遍,那倒没必要了。上面的方法应该就够用了。

posted on 2009-04-22 10:43 delphi2007 阅读(291) 评论(0)  编辑 收藏 引用
只有注册用户登录后才能发表评论。