2012-03-17 20 views
10

मैंने अपने प्रयास को मार्गदर्शन करने के लिए ऑनलाइन मिले कुछ ट्यूटोरियल का उपयोग करके रजिस्ट्री के साथ बातचीत करने के लिए मेरे डेल्फी प्रोजेक्ट में कुछ कोड जोड़ा है। हर उदाहरण मैंने देखा है उनकी रजिस्ट्री पहुँच के लिए इस संरचना का उपयोग करने लगता है:डेल्फी वैरिएबल को चेतावनी प्रारंभ नहीं किया जा सकता है

var 
    Registry: TRegistry; 
begin 
    try 
    Registry := TRegistry.Create; 
    //additional code to access and use the registry object could go here 
    finally 
    Registry.Free; 
end; 

लेकिन जब मैं उस संरचना को निम्नलिखित मेरी कोड लागू है, मैं एक चेतावनी है कि मेरी चर रजिस्ट्री लाइन पर प्रारंभ नहीं किया गया है हो रही है जहां मैं ट्रांजिस्ट्री ऑब्जेक्ट को मुक्त करता हूं।

तो, मैं सोच रहा हूं कि मेरे द्वारा प्राप्त किए गए उदाहरण रजिस्ट्री तक पहुंचने के सही तरीके से गलत हैं या नहीं। क्या मुझे अपनी ट्रांजिस्टिक्स ऑब्जेक्ट पर नि: शुल्क कॉल करना चाहिए, भले ही निर्माण सफल हो, और केवल चेतावनी को अनदेखा कर दें? क्या, इसके बजाय, मेरी कोशिश/आखिरकार ब्लॉक को के बाद सफल कन्स्ट्रक्टर कॉल के बाद अवरुद्ध करना चाहिए, लेकिन कॉल कॉल को लपेटना नहीं चाहिए? कुछ और?

उत्तर

22

अपने कोड में, यदि TRegistry.Create एक अपवाद उठाता है तो Registry चर निर्दिष्ट नहीं किया जाएगा। और इस प्रकार अंततः एक अनियमित चर का उपयोग करने का प्रयास करेगा।

कोड लिखने का सही तरीका यह सुनिश्चित करना है कि try/finally ब्लॉक दर्ज करने से पहले वेरिएबल असाइन किया गया हो।

Registry := TRegistry.Create; 
try 
    //additional code to access and use the registry object could go here 
finally 
    Registry.Free; 
end; 

यह डेल्फी कोडिंग में सबसे मौलिक जीवन प्रबंधन पद्धति है और आप मांसपेशी स्मृति को गहराई से यह वादा करना चाहिए।

ध्यान दें कि यदि निर्माता विफल रहता है, तो यह अपवाद को प्रचारित करने से पहले आंशिक रूप से निर्मित ऑब्जेक्ट को साफ करेगा। इस ऑब्जेक्ट में नया ऑब्जेक्ट संदर्भ, Registry, केवल कन्स्ट्रक्टर को सफलतापूर्वक पूरा करने पर ही असाइन किया जाता है।

मुझे आशा है कि आपके द्वारा प्राप्त किए गए उदाहरण वास्तव में ऊपर दिए गए मेरे कोड के अनुसार लिखे गए थे और आपने किसी भी तरह से उन्हें गलत तरीके से लिखा था। यदि वे प्रश्न के अनुसार लिखे गए हैं, तो वे स्पष्ट रूप से त्रुटि में हैं।

+0

क्या मुझे वास्तव में यह सुनिश्चित करने के लिए प्रयास करें कि रजिस्ट्री प्रारंभ में ठीक है, कोशिश करने से पहले बनाने के बाद मुझे कोई अतिरिक्त जांच करने की आवश्यकता है? –

+0

और उदाहरण के लिए, http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=656&lngWId=7 मुझे मिले ट्यूटोरियल्स में से एक होगा जो वास्तव में यह गलत दिखाई देता है, इसलिए सवाल यह समझने और समझने के लिए कि क्या वास्तव में यह कोड उतना ही उन्नत है जो अधिक उन्नत डेल्फी डेवलपर करेगा या नहीं। –

+0

स्पष्ट रूप से आपको उस साइट की तुलना में बेहतर स्रोत ढूंढने की आवश्यकता है! –

संबंधित मुद्दे