Delphi启动过程追踪
第一步:
_InitExewindow调用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
- DispatchMessageWi->
- StdWndProc
- TWinControl.MainWndProc
- WindowProc: TWndMethod【TControl】
- TControl.WndProc【初始化时指定FWindowProc := WndProc;】
- TControl.WndProc
- procedure TCustomForm.WndProc(var Message: TMessage);
- 基于多态性调用父类TControl的WndProc
Dispatch->TObject.Dispath->消息回调函数
DefaultHandler