delphi debugging initialization delphi-5

delphi - Dónde y cuándo se crea la instancia Application(TApplication)?



debugging initialization (2)

¿Dónde y cuándo se crea la instancia de la Application ? (Lo mismo vale para la instancia de Screen ).

No veo nada en la sección de initialization Forms o System .
En las ventanas de la CPU antes de Application.Initialize , veo una llamada a @_InitExe (SysInit) - que conduce a _StartExe (Sistema) y una gran cantidad de código de asm - Que no crea la instancia de la Application por lo que puedo decir.

¿Que me estoy perdiendo aqui?


Es bastante fácil resolver esto desde el código. Usted acaba de hacer una búsqueda de texto para TApplication.Create . Por ejemplo, usando la característica Find in Files del IDE.

Pero siempre puedes ser flojo y obtener el depurador para hacerlo.

  1. Habilitar Debug DCU.
  2. Establezca un punto de interrupción en TApplication.Create .
  3. Correr.

Cuando el programa se rompe, mira la pila de llamadas. Verá que el objeto TApplication se TApplication una instancia desde InitControls en la unidad Controls . Y InitControls se llama desde la sección de initialization de la unidad de Controls .

La pila de llamadas completa para una aplicación VCL simple de vainilla se ve así:

Vcl.Forms.TApplication.Create(nil) Vcl.Controls.InitControls Vcl.Controls.Vcl.Controls System.InitUnits System._StartExe(???,???) SysInit._InitExe($5A81BC) Project1.Project1 :749933aa kernel32.BaseThreadInitThunk + 0x12 :76f09ef2 ntdll.RtlInitializeExceptionChain + 0x63 :76f09ec5 ntdll.RtlInitializeExceptionChain + 0x36

Haciendo lo mismo con TScreen.Create , verá que el objeto TScreen también se InitControls() instancia en InitControls() .

No intentaré y explicaré todo esto. Creo que aquí hay suficiente información y consejos para que puedas resolverlo todo desde aquí. Aunque esta es la pila de llamadas de una aplicación XE3, se verá igual para su aplicación Delphi 5.


La instancia de la aplicación se crea en el procedimiento InitControls de la unidad Vcl.Controls.pas.

procedure InitControls; begin ... Application := TApplication.Create(nil); ...

InitControls se llama en la sección de inicialización de la misma unidad:

initialization   ...   InitControls;