代码之家  ›  专栏  ›  技术社区  ›  Alan Clark

在Delphi单元初始化前添加代码

  •  4
  • Alan Clark  · 技术社区  · 15 年前

    有没有地方可以添加在单元初始化之前执行的代码?

    我之所以要这样做,是因为我需要更改小数分隔符,这必须在某些单元初始化之前完成。我已经把它放在项目源中,在应用程序之前。初始化,但是到那时已经太迟了。

    如我所见,我唯一的选择是将它放入需要更改小数分隔符的单元的初始化中,是这样吗?

    事先谢谢你的建议。

    3 回复  |  直到 15 年前
        1
  •  14
  •   Mason Wheeler    15 年前

    Delphi中的初始化顺序是确定的:单元初始化的顺序与编译器编译它们的顺序相同,并以相反的顺序完成。编译器从DPR的顶部开始 使用 从小到大,对于找到的每个单元,它递归地执行相同的操作:从 使用 子句,尝试编译每个尚未编译的已用单元,然后编译当前单元。因此,如果您可以在编译任何其他单元之前将单元放入,那么它将首先被初始化。

    如果你想确保它首先被执行,做一个新的单元,把你的更改放在那个单元的 初始化 阻止,然后确保它在依赖更改的任何单元之前结束在DPR中。您甚至可能希望将其设置为第一个单元,除非您已经有了其他“必须是第一个”单元,例如替换内存管理器。

        2
  •  3
  •   mghie    15 年前

    将它放入项目中第一个单元的初始化部分 uses 列表,这样它将在任何其他之前执行 initialization 代码。

        3
  •  1
  •   K.Sandell    15 年前

    这里有一句警告。

    我在一个登录用户的桌面上运行了一个应用程序,在测试应用程序的过程中,小数分隔符为我进行了更改,而我没有重新启动应用程序。

    我以前把

    DecimalSeparator := '.'; 
    

    一次在formCreate()代码中,但这似乎还不够。所以现在,在使用formatfoat()函数(在应用程序中只有一个地方使用)之前,我每次都设置一次。

    我不知道为什么会发生这种情况,但可能会发生一些系统范围的参数更改,在我的系统中将char重置为''。

    避免这种情况的最佳方法可能是将Windows配置中的小数分隔符设置为“.”,以避免出现奇怪的问题…