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