我在.bpl文件中有一个单元,而我需要为我编写的新函数创建一个字符串列表。我希望这个字符串列表在应用程序的生命周期内持续存在,以便每次调用都可以基于前一次的结果进行构建。
因此,它在单元内被全局声明,并在初始化部分中进行了初始化,如下所示:
var
ProductLookup : TStrings;
...
function foo : boolean;
begin
result := (ProductLookup.IndexOfName('bar') >=0); //blow up here. It's nil. Why?
end;
....
initialization
ProductLookup := TStringList.Create; // This should get run, but doesn't.
finalization
FreeAndNil(ProductLookup);
end.
在进行单元测试时,一切都很正常。但是当从主应用程序运行时,我遇到了访问冲突,因为字符串列表是nil。所以现在我正在尝试检查foo函数中的nil并在需要时创建。但是我不知道为什么初始化对我没有起作用。我在Initialization中放了一个调试消息,但在将其加载为BPL时它不会运行,但如果直接编译到我的dUnit exe中,则会运行。有任何想法吗? Delphi2005。