.NET Framework में SafeHandleZeroOrMinusOneIsInvalid
कक्षा के साथ-साथ SafeHandleMinusOneIsInvalid
कक्षा भी है।शून्य कभी वैध संभाल है?
यह क्यों है? किस स्थितियों में शून्य कभी वैध संभाल है?
.NET Framework में SafeHandleZeroOrMinusOneIsInvalid
कक्षा के साथ-साथ SafeHandleMinusOneIsInvalid
कक्षा भी है।शून्य कभी वैध संभाल है?
यह क्यों है? किस स्थितियों में शून्य कभी वैध संभाल है?
अन्य उत्तरों के लिए अतिरिक्त व्याख्यान के रूप में, this OldNewThing blog entry असंगत हैंडल रिटर्न मानों के बारे में देखें।
आपको एक लिंक के पीछे नहीं, विस्तृत करना चाहिए। – tenfour
आप बिल्कुल सही हैं। अगर आपको लगता है कि कुछ भी गुम है, तो मेरा जवाब संपादित करने के लिए स्वतंत्र महसूस करें। असल में मुझे टिप्पणी के रूप में भी पोस्ट करना चाहिए था, क्योंकि यह वास्तव में सवाल का जवाब नहीं देता है। लेकिन मैं अपने दस अंक चूक गया होगा: डी।इसके अलावा मैं किसी को भी रेमंड के अद्भुत ब्लॉग की खोज करने से नहीं रोकना चाहता था (और मैं केवल वहां से टेक्स्ट कॉपी कर सकता था, जो मुझे समय बर्बाद कर रहा था) – MartinStettner
@ मार्टिनस्टेटनर: यह एक स्वीकार्य रूप से अच्छा लिंक है, लेकिन यह नहीं कहता .NET wrappers के बारे में कुछ भी, यानी क्यों 'SafeHandleMinusOneIsInvalid' बिल्कुल मौजूद है। वैसे भी +1, लेकिन मुझे संदेह है कि मैं इसे स्वीकार करूँगा। : पी – Mehrdad
के रूप में उनके documentation में माइक्रोसॉफ्ट द्वारा प्रस्तुत (और Joshua, द्वारा विवरण में प्रदर्शन किया) यह कार्यान्वयन निर्भर है, इसलिए बात करने के लिए:
यह गलत हैंडल के प्रारूप का वर्णन है।
उदाहरण के लिए, कुछ हैंडल का उपयोग -1 गलत संभाल मूल्य के रूप में, जबकि दूसरों को 0 का उपयोग करें। इस वर्ग के व्युत्पन्न (उदाहरण के लिए, फ़ाइल या रजिस्ट्री हैंडल) विशेषज्ञ कर सकते हैं। SafeHandleZeroOrMinusOneIsInvalid से प्राप्त कक्षा के उदाहरण के लिए SafeFileHandle क्लास देखें।
मुझे लगता है कि आप नाम में बहुत अधिक पढ़ रहे हैं: इसका मतलब यह है कि सम्मेलन द्वारा कुछ एपीआई विफलता को इंगित करने के लिए 0 लौटते हैं, अन्य लोग -1 लौटते हैं। एक एपीआई के लिए जो -1 देता है, इसका मतलब यह नहीं है कि 0 कभी वैध संभाल होगा, केवल एपीआई विफलता को इंगित करने के लिए -1 देता है।
तो यह वास्तव में उस मान के बारे में है जिसका उपयोग आमतौर पर विफलता को इंगित करने के लिए एक एपीआई द्वारा किया जाता है; यह किसी भी अन्य हैंडल मान मान्य नहीं है या नहीं, किसी भी दिए गए सेट के लिए यह कुछ भी नहीं कहता है।
ठीक है, लेकिन फिर कैसे 'SafeHandleZeroIsInvalid' कक्षा नहीं है? निश्चित रूप से एक * बहुत * अधिक एपीआई हैं जो शून्य के बजाय शून्य को अमान्य मान के रूप में वापस कर देते हैं? – Mehrdad
मुख्य मुद्दा यह है कि एक ही हैंडल क्लास को * दोनों प्रकार के एपीआई के साथ काम करने की आवश्यकता है। इस मामले में "शून्य * या * माइनस वन" का अर्थ है * दोनों * को अमान्य माना जाता है - नहीं * या तो/या *। यह CreateMutex (विफलता पर NULL लौटाता है) के साथ CreateFile API (विफलता पर INVALID_HANDLE_VALUE लौटाता है) के साथ समान बेस क्लास का उपयोग करने की अनुमति देता है। दो अलग-अलग आधार वर्ग क्यों हैं (जो उपयोगकर्ता गलत होने पर भ्रम और त्रुटि का कारण बन सकता है) जब कोई दोनों मामलों को संभाल सकता है? – BrendanMcK
मुझे लगता है कि आज शून्य कभी वैध संभाल नहीं है; अभी मैं विंडोज 7 पर प्रोसेस एक्सप्लोरर में देख रहा हूं और मानों को 4 से शुरू करता हूं (छवि फ़ाइल निष्पादन विकल्प रजिस्ट्री कुंजी, दिलचस्प रूप से)। मुझे संदेह है कि यह समय से पहले है जहां शायद कुछ प्राचीन Win16 या DOS फ़ंक्शन जो फ़ाइल खोलता है, शून्य के मान के साथ एक हैंडल या डिस्क्रिप्टर वापस कर सकता है। आज, 0 और -1 विशेष अमान्य मान हैं इसलिए मैं कल्पना नहीं कर सकता कि आपको कभी भी वैल्यू के साथ एक मान्य हैंडल मिलेगा। आप जांच सकते हैं कि कौन से .NET एपीआई सुरक्षित हैंडलमिनसऑनइन्स इनवालिड का उपयोग करते हैं; शायद यह आपको कुछ संकेत देगा। – Luke
@ ल्यूक: हो सकता है ... लेकिन फिर भी, जब वे .NET 2.0 में सेफहैंडल को डिज़ाइन कर रहे थे तो वे Win16/DOS के बारे में क्यों परवाह करेंगे? – Mehrdad
शायद कोई सीधा लिंक नहीं था, लेकिन बाकी सब कुछ के ऊपर सबकुछ बनाया गया है, इसलिए पिछड़ा संगतता एक महत्वपूर्ण विचार है। विंडोज 98 पर .NET 2.0 रन, आप जानते हैं; जब आप इसके बारे में सोचते हैं तो यह प्रभावशाली होता है। – Luke