У меня есть блок в .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 и создаю при необходимости. Но я' m в недоумении, почему инициализация у меня не работает. Я помещаю отладочное сообщение прямо в Инициализацию, и оно не запускается, когда загружается как BPL, но ДЕЙСТВИТЕЛЬНО запускается, если я компилирую непосредственно в свой dUnit exe. Есть идеи? Delphi2005.