Delphi启动过程追踪

Delphi启动过程追踪

第一步:

_InitExe window调用exe的入口

_StartExe

InitUnits

第二步:

InitControls 的initialization部分

TApplication.Create

AllocateHWnd

AllocateHWnd

MakeObjectInstance

StdWndProc

Instance^.FMethod := TMethod(AMethod);

AMethod==首次创建App时对应PopupControlProc

PMethod = ^TMethod;
`TMethod = record
Code, Data: Pointer;
public
class operator Equal(const Left, Right: TMethod): Boolean; inline;
class operator NotEqual(const Left, Right: TMethod): Boolean; inline;
class operator GreaterThan(const Left, Right: TMethod): Boolean; inline;
class operator GreaterThanOrEqual(const Left, Right: TMethod): Boolean; inline;
class operator LessThan(const Left, Right: TMethod): Boolean; inline;
class operator LessThanOrEqual(const Left, Right: TMethod): Boolean; inline;
end;`

第三部:

  • Application.Initialize;
  • Application.Run;

第四步:

  • HandleMessage
  • TApplication.ProcessMessage
  • PeekMessage
  • TranslateMessage
  • DispatchMessageW i->
  • StdWndProc
  • TWinControl.MainWndProc
  • WindowProc: TWndMethod【TControl】
  • TControl.WndProc【初始化时指定FWindowProc := WndProc;】
  • TControl.WndProc
  • procedure TCustomForm.WndProc(var Message: TMessage);
  • 基于多态性调用父类TControl的WndProc
  • Dispatch->TObject.Dispath->消息回调函数

  • DefaultHandler

猜你喜欢

转载自www.cnblogs.com/windlog/p/12354270.html