Tengo una unidad dentro de .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 de la aplicación, de modo que cada llamada pueda basarse en lo que encontró la llamada anterior.La inicialización de la unidad Delphi no siempre se llama
por lo que es declarado a nivel mundial dentro de la unidad, y yo inicializarlo en la sección de inicialización, como esto:
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 probada, todo estaba bien. Pero cuando se ejecuta desde la aplicación principal, explotaba con una infracción de acceso porque la lista de cadenas era nula. Así que ahora estoy recurriendo a buscar nulo en la función foo y crear si es necesario. Pero no entiendo 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 un BPL, pero se ejecuta si compilo directamente en mi exe dUnit. ¿Algunas ideas? Delphi2005.
Salida respuesta de Rob Kennedy aquí: http://groups.google.com/group/borland.public.delphi.language.delphi.general/browse_thread/thread/5f73d43146d4d8dc/cc4740216011f633?hl=en&ie=UTF- 8 & q = delphi + bpl + inicialización –