.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 関数で nil をチェックし、必要に応じて作成することに頼っています。しかし、初期化がうまくいかない理由がわかりません。私は初期化にデバッグメッセージを入れました。これがBPLとして読み込まれると実行されませんが、dUnit exeに直接コンパイルすると実行されます。何か案は?Delphi2005.