更改Delphi中单元的初始化顺序

2024-04-01

我正在使用 Delphi XE7 开发 Windows 32 位应用程序。

我的应用程序包含许多单元,其中有一个初始化部分。我需要首先初始化一个特定的初始化部分。

可以设置优先级吗? 我尝试在 dpr 文件中写入初始化部分,但编译器拒绝了这一点。

请帮助我首先执行特定的初始化部分。提前致谢。


简单来说,初始化部分按照在任何单元中引入单元的顺序执行。uses条款。但它比这要复杂一点,因为仅执行单元的初始化在该单元本身引用的任何单元初始化之后(它们尚未初始化)。

即给定:

program Foo;

  uses
    Unit1,
    Unit2,
    Unit3;

unit Unit1;

interface

  uses
    Unit3;

那么单元初始化顺序将是:

Unit3
Unit1
Unit2

这是因为Unit1介绍Unit3,所以即使Unit1被列在第一个dpr uses, Unit3实际上是首先初始化,然后是初始化Unit1.

如果您还记得initialization部分发生after any uses单元中的子句,确实有意义。

因此,唯一能够绝对确定任何一个单元之前已初始化的方法any另一种是将其首先列出DPR uses子句,并且该单元不依赖于任何其他单元(除非这些单元不依赖于或以其他方式干扰正在执行的初始化)。

它不一定是strictly当然是首先。例如如果您正在使用替换内存管理器(例如 FastMM),那么这绝对需要成为您的文件中列出的第一个单元dpr uses条款。您只需要确保您需要在任何其他(您的单元)之前初始化的单元然后在可能将您的其他单元引入的任何其他单元之前列出:

program  Foo;

uses
  FastMM,            // MUST be first but won't bring any of 'my' units in, so this is OK

  SysUtils,          // These too are fine coming next because again they don't
  Forms,             // reference 'my' units

  MyInitUnit,        // <- This is where it is important to list 'my' guaranteed first/earliest
                     //     initialisated unit of all 'my' units

  MyFirstAppUnit,    // And now the rest ...
  etc;

当然,如果您要先初始化的单元does之前需要初始化any其他,包括 RTL 单元(与 FastMM 等需要的方式相同),那么您需要在dpr uses更早地声明您的单位来列出。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

更改Delphi中单元的初始化顺序 的相关文章

  • 如何更改 Chromium 组件的默认背景颜色?

    I use TChromium http code google com p delphichromiumembedded 我分配AWebPageAsString这是一个带有灰色背景颜色的静态 HTML 页面 FBrowser TChrom
  • 如何更新Delphi对象检查器?

    继我最近发布的这个问题之后 组件编辑器可以在多个组件上执行吗 https stackoverflow com questions 14802371 can a component editor be executed on multiple
  • ADODB 组件导致 Win7/Server 2008 上的访问冲突

    我有一段用 Delphi 2005 编写的代码 用于在 LDAP 中搜索用户的特定属性 当在 Windows 7 或 Server 2008 上运行时 我遇到访问冲突 但在 XP 或 2003 上则没有 Function IsSSOUser
  • 如何以编程方式安排任务

    如何使用 delphi 7 像 Google updater 一样安排任务 我没有使用注册表 因为它被卡巴斯基防病毒软件检测为误报 我在注册表中作为启动项添加的任何内容都会被检测为特洛伊木马 因此我决定使用任务计划 下面的代码展示了如何删除
  • 如何在Delphi XE中通过名称获取类类型引用?

    我实际上正在尝试使用 Rtti 来实现通用方法调用程序 它应该像这样工作 我将提供类名 方法名和参数 调用者将通过调用此类的指定方法来完成其工作 因此 我需要类引用才能获取其 Rtti 信息并寻找我想要调用的方法 有没有办法在不实现我想要使
  • 加载 Jpg/Gif/Bitmap 并转换为 Bitmap

    我必须从 XML 文件加载图像 XML 文件中没有关于图像是否为 JPG GIF BMP 的信息 加载图像后 我需要将其转换为位图 有谁知道如何在不知道实际文件格式的情况下将图像转换为位图 我正在使用 Delphi 2007 2009 谢谢
  • 如何在 Delphi REST 中发布内容类型为“multipart/form-data”的数据?

    我正在尝试使用 REST API 发送请求multipart form data作为内容类型 我总是收到 HTTP 1 1 500 Internal Error 作为响应 我尝试向需要的方法发送请求application x www for
  • 使用Delphi检查HTML代码中是否有对象属性值

    如何使用Delphi检查HTML代码中是否有输入对象属性值 there isn t value attribute
  • Async InputQuery 不处理“取消”按钮

    我正在使用一个简单的调用TDialogServiceAsync InputQuery 使用单个输入 它只是忽略了Cancel按钮和窗口的X关闭按钮 But the Ok按钮工作正常 这是我的代码 uses FMX DialogService
  • 如何在 Delphi DBLookupComboBox 中选择正确的项目

    我有一个数据库查找组合框连接到数据库查询 那部分工作正常 当我运行程序时数据库查找组合框填充有查询的结果 我想看看数据库查找组合框填充第一项 请选择 当 的时候程序第一次运行或者当一个新项目行动已启动 见下图 另外 如果我正在加载以前保存的
  • 在 Delphi 中使用 XML(将特定数据返回到变量)

    过去几天我一直在尝试使用 Delphi 2010 和 MSXML 我是一个极端的新手 需要一点指导 var MemoryStream TMemoryStream XMLPath String sName String XMLDoc vari
  • Delphi 2009 IDE结构视图折叠功能

    现在有谁知道折叠 Delphi 2009 IDE 结构视图中的所有项目吗 我不知道折叠所有项目 这使我很难从视图中找到我的课程 Thanks 选择根节点 类 并按数字键盘上的 除号 那会让一切崩溃 然后按数字键盘上的 加号 键 第一级将展开
  • delphi中如何实现多重继承?

    我正在对一个旧库进行完全重写 我不确定如何处理这种情况 为了便于理解 大家都欢呼自行车类比 我有以下课程 TBike 自行车本身 TBikeWheel 自行车的一个轮子 TBikeWheelFront and TBikeWheelBack
  • 在 Delphi 中编程延迟的最佳方法是什么?

    我正在开发的 Delphi 应用程序必须延迟一秒 有时甚至两秒 我想使用最佳实践来对此延迟进行编程 在阅读 stackoverflow 上有关 Delphi Sleep 方法的条目时 我发现了以下两条评论 我遵循这样的格言 如果你觉得需要使
  • Delphi - 获取和设置 ListView 的滚动条位置

    这似乎是一个愚蠢而简单的问题 然而 我一直无法找到令人满意的答案 基本上 我有一个列表视图 样式 vsReport 与数据 有时 我必须更新它 因此 我必须清除列表视图并用更新的数据再次填充它 但是 当我这样做时 滚动条位置将重置为 0 我
  • 供所有 Win32 程序员在 Windows Aero Glass(DWM、GDI、GDI+)上绘图的文档和 API 示例

    我正在寻找良好的资源来学习使用 Win32 GDI API 或任何替代它的内容 以便使用 Win32 API 直接在玻璃窗体上进行绘制和绘制 当我使用 Delphi 时 我将其标记为 Delphi 或 Visual C 您能找到的任何代码示
  • 可以在滚动条上绘画吗?

    是否可以在 TMemo TListbox 等标准控件的滚动条上进行绘制 我所需要的只是在滚动条上绘制一些基本形状 并且我试图避免从 stratch 实现整个滚动内容 有什么指点吗 蒂亚 确实有可能 你可能想看一下WM NCPAINT消息 这
  • 将delphi stringgrid导出到excel

    我正在尝试将数据从delphi 7 中的stringgrid 导出到microsoft excel 我一直在使用这段代码来做到这一点 objExcel TExcelApplication Create nil objExcel Visibl
  • TStream.Position 与 TStream.Seek 比较

    要移动 TStream 类中的 当前字节 指针 我们可以使用属性 Position 例如 MyStream Position 0 或使用 Seek 方法 例如 MyStream Seek 0 soFromBeginning 问题是 哪一个更
  • delphi THashSHA2 在大文件上返回错误的 SHA256

    Data Cloud CloudAPI pas has class function TCloudSHA256Authentication GetStreamToHashSHA256Hex const Content TStream str

随机推荐

  • Mac 应用程序上的“锁定”屏幕

    在 Mac OS X 中 我需要调用什么 API 才能将窗口不仅覆盖整个屏幕 而且还覆盖菜单栏和停靠栏 另外 是否可以有效地将屏幕 锁定 到这个位置 禁用任务控制 启动板等 我已在应用程序委托的实现文件中尝试了以下代码 void awake
  • Javascript MVC 框架的目的[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我想知道 Javascript MVC 框架 例如 Backbone js 和 Spine js 的用途 作为一名热心 经验丰富的 Ruby o
  • jquery:在选择更改时按名称调用函数

    我正在尝试按名称调用函数 onchange选择但没有任何反应 当功能描述在属性之后时 它就起作用了 这不起作用 HTML
  • 行中的三个按钮 -> 调整大小以适合父级宽度

    我有这个布局 Linear Layout Scroll View Relative Layout 9x 按钮 在这样的视图中 3x3 网格 o o o o o o o o o 每个按钮都有它的背景 没有文字 背景如下
  • 从javascript隐藏handsontable的列

    有什么方法可以隐藏 JavaScript 中的热门列吗 要求是要隐藏的列将作为 javascript 中的参数出现 并且相应的列将相应地显示隐藏 HOT 有 rowHeaders 和 colHeaders 以及 20 列的数据 请指教 过时
  • 如何在 zip 文件上使用 grep 命令

    我想从 zip 文件中 grep 查找今天的日期 怎么能做到这一点呢 我有一个名为 sen2616 z 的 zip 文件 我想获取今天日期 09 02 2014 的所有数据 请用zipgrep zgrep适用于 gz 文件 不适用于 zip
  • 查找后面不跟某个字符的“单词”

    搜索的正则表达式是什么word后面不跟的字符串 symbol 例如 mywordLLD OK myword dff OK myword ld Exclude The 消极的展望 http www regular expressions in
  • YouTube API - 按发布日期查询

    我正在编写一个网络应用程序 它使用 YouTube 代码 API 来执行特定类型的搜索 在本例中 我尝试搜索与查询匹配且在两个日期之间上传的所有视频 这个文件 http code google com apis youtube 2 0 de
  • 在Python中将文件更改为只读模式

    我正在编写一个数据处理代码 在其中创建一个新文件 将处理后的数据写入该文件并关闭 但该文件必须以只读模式关闭 以免被意外修改 这可以用 Python 完成吗 为此 您使用os chmod https docs python org 2 li
  • 有 Groovy 的源代码格式化程序吗? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我在 Java 项目中使用 Jalopy 的商业版本 但它不适用于 Groovy 文件 Intelli
  • 处置 SqlCommand

    Because SqlCommand实施IDisposable 我通常会按如下方式处理 ADO 查询 using SqlConnection connection new SqlConnection connectionString usi
  • 测试 Javascript 中未定义的嵌套对象[重复]

    这个问题在这里已经有答案了 可能的重复 javascript测试嵌套对象键是否存在 https stackoverflow com questions 2631001 javascript test for existence of nes
  • GruntJs 'grunt' cmd 打开 Visual Studio?

    我已经能够使用GruntJs https github com cowboy grunt在几个零问题的个人项目上 我决定在我的工作项目中使用它 I run grunt init gruntfile这样就可以创建 gruntfile 和 pa
  • oracle 11G中自动删除最旧的分区

    如果分区超过三个月 我需要从间隔分区表中删除分区 是否有 Oracle 实用程序 函数可以执行此操作 或者如果没有 如何实现 请指导我 Database version Oracle 11G 我不知道有任何 Oracle 实用程序或函数可以
  • 索引有不同的表空间有什么逻辑原因吗?

    您好 有人可以告诉我为什么我们为索引和数据创建不同的表空间吗 人们普遍认为 将索引和表保存在单独的表空间中可以提高性能 现在 许多受人尊敬的专家认为这是一个神话 参见这个 问汤姆 主题 搜索 神话 https asktom oracle c
  • J2ME中的GUI设计

    我最近一直在研究移动编程 我实际上尝试了J2ME 抛光 GUI 框架 http www j2mepolish org 虽然用 Polish 制作的 GUI 看起来相当不错 但我意识到用户界面并不是我想要的 我开始在网络上搜索 Stack O
  • WPF 在选择时更改 ListboxItem 突出显示颜色

    我在设置时遇到问题HighlightBrushKey of a SelectedItem of a Listbox在 WPF 中 我的目的是根据代码中给定的布尔值设置项目的颜色 我尝试了以下步骤 实现转换器 检查布尔值并返回正确的颜色 例子
  • openssl 1.1.0 中替代 AES_ctr128_encrypt 的确切替代 API 是什么?

    我需要在 CTR 模式下使用 128 位 AES 算法来从 openssl 库进行加密 但似乎相应的函数AES ctr128 encrypt已从openssl 1 1 0g中删除 因为我收到以下错误 Documentation or ref
  • Html:无需控件即可播放音频?

    当用户单击图像时 我需要播放 mp3 音频文件 我只想播放音频 即不应该有控件 小部件等 浏览器也不应该启动外部应用程序 编辑 好的 我也许可以尝试一下 flash 有推荐的轻量级Flash播放器吗 现在有办法做到这一点 把这个
  • 更改Delphi中单元的初始化顺序

    我正在使用 Delphi XE7 开发 Windows 32 位应用程序 我的应用程序包含许多单元 其中有一个初始化部分 我需要首先初始化一个特定的初始化部分 可以设置优先级吗 我尝试在 dpr 文件中写入初始化部分 但编译器拒绝了这一点