我正在使用Delphi XE7开发Windows 32位应用程序。
我的应用程序包含许多单元,其中包含一个初始化部分。首先,我需要初始化一个特定的初始化部分。
是否可以设置优先级? 我试图在dpr文件中编写初始化部分,但编译器拒绝了。
请首先帮助我执行特定的初始化部分。预先感谢。
答案 0 :(得分:9)
简单来说,初始化部分按照在任何 即鉴于: 然后单元初始化顺序为: 这是因为 如果您记得 因此,要完全确定任何一个单元在任何之前被初始化的唯一方法是在 DPR 当然不一定必须严格地是 。例如如果您使用的是备用内存管理器(例如FastMM),则绝对需要成为 dpr 当然,如果您要首先初始化的单元需要,则需要先初始化其他uses
子句中引入单元的顺序执行。但是,由于仅在对该单元本身引用的任何单元进行初始化之后(尚未初始化)才执行该单元的初始化,因此它要复杂得多。< / p>
program Foo;
uses
Unit1,
Unit2,
Unit3;
unit Unit1;
interface
uses
Unit3;
Unit3
Unit1
Unit2
Unit1
引入了Unit3
,因此即使Unit1
在 dpr 用法中排在首位,实际上Unit3
已初始化首先,然后初始化Unit1
。initialization
部分出现在单元中任何uses
子句的之后,那么这确实是有道理的。uses
子句中首先列出该单元,该单元不依赖于任何其他单元(除非那些单元不依赖于或以其他方式干扰正在执行的初始化)。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;
uses
列表中反映出来。
答案 1 :(得分:0)
初始化部分按照单元在def remove_bad_chars(string, chars):
for char in chars:
string = string.replace(char, '')
return string
子句中出现的顺序执行。
因此,您可以通过在if 'feedbackreport' in remove_bad_chars(name, '.,?!\'-/:;()"\\~ ').lower()
# included a white space in the string of bad characters
列表中向上移动单元来强制其首先进行初始化。