我有一個.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.
當我單元測試它,一切都很好。但是當它從主應用程序運行時,我因爲訪問衝突而爆炸,因爲stringlist是零。所以現在我正在檢查foo函數中的nil,並在必要時創建。但我不知道爲什麼初始化不適合我。我在初始化時在那裏放了一個調試消息,當它作爲BPL加載時,它不會運行,但是如果我直接編譯到我的dUnit exe文件中,它會運行。有任何想法嗎? Delphi2005。
退房羅伯肯尼迪的答案在這裏:http://groups.google.com/group/borland.public.delphi.language.delphi.general/browse_thread/thread/5f73d43146d4d8dc/cc4740216011f633?hl=en&ie=UTF- 8&q = delphi + bpl + initialization – 2011-01-06 19:18:55