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.