Application
实例是在何时何地创建的?
(Screen
实例也是如此)。
我在 Forms
或 System
initialization
部分中没有看到任何内容。
在 Application.Initialize
之前的 CPU 窗口中,我看到对 @_InitExe
(SysInit) 的调用 - 这导致 _StartExe
(System) 和大量 asm
代码 - 据我所知,它不会创建 Application
实例。
我在这里缺少什么?
最佳答案
通过代码很容易解决这个问题。您只需进行文本搜索 TApplication.Create
。例如,使用 IDE 的“在文件中查找”功能。
但是你总是可以偷懒并让调试器来完成它。
- 启用调试 DCU。
- 在
TApplication.Create
设置断点. - 运行。
当程序中断时,查看调用堆栈。您将看到 TApplication
对象从 InitControls
实例化在 Controls
单元。和InitControls
从 initialization
调用Controls
部分单位。
普通 VCL 应用程序的完整调用堆栈如下所示:
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
用 TScreen.Create
做同样的事情,您会看到TScreen
对象也在 InitControls()
中实例化.
我不会尝试解释这一切。我认为这里有足够的信息和建议供您从这里解决所有问题。虽然这是来自 XE3 应用程序的调用堆栈,但它对于您的 Delphi 5 应用程序来说看起来是一样的。
关于delphi - 应用程序 (TApplication) 实例在何时何地创建?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14757320/