Инициализация модуля Delphi не всегда вызывается

У меня есть блок в .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.

9
задан Jeroen Wiert Pluimers 13 January 2011 в 23:30
поделиться