易截截图软件、单文件、免安装、纯绿色、仅160KB

Delphi 类与对象内存结构浅析(下)

对象空间
内存结构
对象的内存结构是固定的,对象创建完成后就无法改变。它主要存储了对象直属类的地址(等价于类的VMT),对象本身的成员数据,对象的接口方法表地址。结构如图所示:
说明:若类未声明接口,则对象空间不存储接口方法表地址。
 
类空间与对象空间的关系
类空间与对象空间:
示例:分析对象的基本内存结构
代码:
type
    IMyInterface = interface(IUnknown)
        ['{06F3EA2C-E9C2-410E-97BE-D88ADF775EC3}']
        procedure InterfaceMethod1;
    end;
    TMyObject = class(TInterfacedObject,IMyInterface)
    private
        FField1: Integer;
        FField2: Boolean;
    protected
        procedure InterfaceMethod1;
    public
        procedure DynamicMethod1; dynamic;
        procedure DynamicMethod2; dynamic;
        procedure VirtualMethod1; virtual;
        procedure VirtualMethod2; virtual;
    end;
    TMyObject2 = class(TMyObject)
    private
        FField3: Integer;
    public
        procedure DynamicMethod1; override;
        procedure VirtualMethod1; override;
    end;
 
内存结构:
TInterfacedObject内存结构如图:
TMyObject内存结构如图:
 
TmyObject2内存结构如图:
 
 
如图,TMyObject2的VirtualMethod1方法覆盖了父类的VirtualMethod1方法,故虚方法表中VirtualMethod1的指针指向了TMyObject2的VirtualMethod1方法。TMyObject2的DynamicMethod1方法覆盖了父类的DynamicMethod1方法,由于动态方法表只保存当前类的动态方法表,故表中只有一个DynamicM


相关文档:

delphi 对 RES文件的使用

一、引子:
     现在的Windows应用程序几乎都使用图标、图片、光标、声音等,我们称它们为资源(Resource)。最简单的使用资源的办法是把这些资源的源文件打入软件包,以方便程序需要的时候调用。资源是程序的一部分,程序要正常运行就离不了资源文件。但是它是不可执行代码。
   &n ......

Windows API 的数据类型与 Delphi 数据类型对照表

Windows API 的数据类型与 Delphi 数据类型对照表
作者:admin 来源:未知 日期:2010-1-28 13:10:56 人气:43 标签:API
导读:WindowsAPI的数据类型与Delphi数据类型对照表
Windows 数据类型 
 Delphi 数据类型 
描述
LPSTR
PAnsiChar
字符串指针
LPCSTR
PAnsiChar
字符串指针
DWORD
LongWo ......

Delphi中建议使用的语句

Delphi中建议使用的语句
楼主zswang(伴水清清)(专家门诊清洁工)2002-05-15 13:37:54 在 Delphi / VCL组件开发及应用 提问
No.1   判断逻辑类型  
  var   B:   Boolean;  
  begin  
      B   :=   Boolean(2);   //这样只是为了调试//B ......

delphi指针简单入门

delphi指针简单入门:  
   
  看一个指针用法的例子:  
  1         var  
  2             X,   Y:   Integer;       //   X   and   Y   整数类型  
  3 ......

Delphi中窗体响应按键步骤

1.因为KeyPreview默认是 False;我们这里需要响应键盘事件的话,需要将其修改为True;
所以KeyPreview:=True; 这对一些快捷键会有用。
在窗体属性上修改KeyPreview := True;
2.在窗体的FormKeyDown函数里写:
if KeyPreview then
    Form将先响应键盘事件(在TEdit等控件之前)
else
    除非Fo ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号