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
相关文档:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, DBGrids, DB, ADODB, StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
Button ......
关开发习惯的一些想法,如鲠在喉,不吐不快。究其发贴动机,当然不排除有骗取参与分的可能,但另一方面,也希望能给同行(念Xing)者提供一些建议,或者参考(希望不是误人子弟)。同时,也希望各位能够就我的这些陋习,发表一点看法,给出批评和指正的意见。谢谢。
一.建立工程目录
&nbs ......
索引是itemindex
item是里面的内容
索引的话,是从0开始
item itemindex
A 1
B 2
C 3
listbox1.items.count就是这个列表框里总共有多少项. ......
Delphi 能不能从Ring 3进入Ring 0?
楼主skyworld_xm(skyworld)2004-11-19 09:58:55 在 Delphi / Windows SDK/API 提问
Delphi 能不能从Ring 3进入Ring 0?
有例子吗?
多谢. 问题点数:100、回复次数:20Top
1 楼jinjazz(近身剪)回复于 2004-11-19 10:13:27 得 ......
1.因为KeyPreview默认是 False;我们这里需要响应键盘事件的话,需要将其修改为True;
所以KeyPreview:=True; 这对一些快捷键会有用。
在窗体属性上修改KeyPreview := True;
2.在窗体的FormKeyDown函数里写:
if KeyPreview then
Form将先响应键盘事件(在TEdit等控件之前)
else
除非Fo ......