gpt4 book ai didi

delphi - 应用程序 (TApplication) 实例在何时何地创建?

转载 作者:行者123 更新时间:2023-12-03 14:40:56 25 4
gpt4 key购买 nike

Application 实例是在何时何地创建的?(Screen 实例也是如此)。

我在 FormsSystem initialization 部分中没有看到任何内容。
Application.Initialize 之前的 CPU 窗口中,我看到对 @_InitExe (SysInit) 的调用 - 这导致 _StartExe (System) 和大量 asm 代码 - 据我所知,它不会创建 Application 实例。

我在这里缺少什么?

最佳答案

通过代码很容易解决这个问题。您只需进行文本搜索 TApplication.Create 。例如,使用 IDE 的“在文件中查找”功能。

但是你总是可以偷懒并让调试器来完成它。

  1. 启用调试 DCU。
  2. TApplication.Create 设置断点.
  3. 运行。

当程序中断时,查看调用堆栈。您将看到 TApplication对象从 InitControls 实例化在 Controls单元。和InitControlsinitialization 调用Controls 部分单位。

普通 VCL 应用程序的完整调用堆栈如下所示:

Vcl.Forms.TApplication.Create(nil)Vcl.Controls.InitControlsVcl.Controls.Vcl.ControlsSystem.InitUnitsSystem._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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com