我在 .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 并在必要时创建。但是我不知道为什么初始化对我不起作用。我在初始化中放了一条调试消息,当它作为 BPL 加载时它不会运行,但是如果我直接编译到我的 dUnit exe 中就会运行。有任何想法吗?德尔福2005。