Как вы загружаете bpl? Вы оставляете это Delphi для загрузки или вручную загружаете bpl? Если вы загружаете bpl вручную, загружаете ли вы его как «прямую» dll или используете LoadPackage для загрузки его как пакета delphi? Я думаю, что для запуска разделов инициализации, выполняемых vcl, требуется либо позволить vcl загрузить его (посредством обработки по требованию), либо использовать LoadPackage ...

я есть модуль внутри .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.

Ответы на вопрос(4)

Ваш ответ на вопрос