नहीं कहा जाता है मेरे पास एक .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.
जब मैं इकाई यह परीक्षण किया है, सब कुछ ठीक था। लेकिन जब यह मुख्य ऐप से चलाया जाता है, तो मैं एक्सेस उल्लंघन के साथ उड़ रहा था क्योंकि स्ट्रिंगलिस्ट शून्य थी। तो अब मैं foo फ़ंक्शन में शून्य की जांच कर रहा हूं और यदि आवश्यक हो तो बनाना चाहता हूं। लेकिन मुझे नुकसान हुआ है कि क्यों शुरुआत मेरे लिए काम नहीं कर रही है। मैंने शुरुआत में एक डीबग संदेश डाला है, और जब यह बीपीएल के रूप में लोड होता है तो यह नहीं चलता है, लेकिन अगर मैं सीधे अपने dUnit exe में संकलित करता हूं तो चला जाता है। कोई विचार? Delphi2005।
रोब कैनेडी के जवाब चेक आउट यहाँ: http://groups.google.com/group/borland.public.delphi.language.delphi.general/browse_thread/thread/5f73d43146d4d8dc/cc4740216011f633?hl=en&ie=UTF- 8 और क्यू = डेल्फी + बीपीएल + प्रारंभिकरण –