初始化实例代码,看得我头痛,请高手帮忙,因为我正结合李维的VCL书看代码。(30分)

  • 主题发起人 主题发起人 38152977
  • 开始时间 开始时间
3

38152977

Unregistered / Unconfirmed
GUEST, unregistred user!
class function TObject.InitInstance(Instance: Pointer): TObject;
{$IFDEF PUREPASCAL}
var
IntfTable: PInterfaceTable;
ClassPtr: TClass;
I: Integer;
begin
FillChar(Instance^, InstanceSize, 0);
PInteger(Instance)^ := Integer(Self);
ClassPtr := Self;
while ClassPtr <> nil do
begin
IntfTable := ClassPtr.GetInterfaceTable;
if IntfTable <> nil then
for I := 0 to IntfTable.EntryCount-1 do
with IntfTable.Entries do
begin
if VTable <> nil then
PInteger(@PChar(Instance)[IOffset])^ := Integer(VTable);
end;
ClassPtr := ClassPtr.ClassParent;
end;
Result := Instance;
end;

谁能帮我详细解说每一行。特别是 PInteger(@PChar(Instance)[IOffset])^ := Integer(VTable); 30分
 
占个位~~听课~
 
偶也占一个,听听。
 
看看别人的见解
 
给初学者一个阅读提示

^ 指针操作符
@ 取内存地址
PInteger() 强制类型转换为32位地址指针(在win32系统上integer类型是32位的)
Integer() 强制类型转换
[0] 顺序访问

这样,代码就比较好理解了
 
后退
顶部