La inicialización de la unidad Delphi no siempre se llama

Tengo una unidad dentro de un .bpl, y necesito una lista de cadenas para una nueva función que escribí. Quiero que la lista de cadenas persista durante toda la vida útil de la aplicación, para que cada llamada pueda basarse en lo que encontró la llamada anterior.

Entonces se declara globalmente dentro de la unidad, y lo inicializo en la sección Inicialización, así:

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.

Cuando la unidad lo probó, todo estaba bien. Pero cuando se ejecuta desde la aplicación principal, estaba explotando con una violación de acceso porque la lista de cadenas era nula. Así que ahora estoy recurriendo a buscar nil en la función foo y crear si es necesario. Pero no sé por qué la inicialización no funciona para mí. Puse un mensaje de depuración allí mismo en la Inicialización, y no se ejecuta cuando esto se carga como BPL, pero SE ejecuta si compilo directamente en mi dUnit exe. ¿Algunas ideas? Delphi2005.

Respuestas a la pregunta(4)

Su respuesta a la pregunta