2012-06-18 14 views
5

मैंने खुद को भ्रमित करने में कामयाब रहा है कि मुझे अपने COM सर्वर विधियों से E_NOTIMPL या E_NOINTERFACE वापस करना चाहिए या नहीं।मैं E_NOTIMPL और E_NOINTERFACE के बीच कैसे चयन करूं?

मेरे पास दो वर्गों के साथ एक वर्ग है जिसे मैंने विरासत में प्राप्त कक्षा से ओवरराइड किया है, दोनों कार्य कुछ भी नहीं करते हैं क्योंकि वे वास्तव में इस समय समर्थित नहीं हैं, इसलिए मुझे पूछना चाहिए कि मैं "लागू नहीं किया गया" या " कोई इंटरफ़ेस नहीं "इन कार्यों के लिए मान वापस आते हैं?

क्या किसी के पास प्रत्येक का उपयोग करने के अंगूठे का सामान्य नियम है?

उत्तर

6

आप एक पूरे इंटरफ़ेस को लागू करने में विफल रहा है, तो अपनी QueryInterface स्पष्ट E_NOINTERFACE लौट सकता है, इसलिए है कि कोई भी अपने तरीकों में से किसी भी फोन करने के लिए प्रयास करता है, या आप बस पद्धतियों का अनुपालन कर सकता है E_NOTIMPL लौट सकते हैं (यह वास्तव में मतलब है कुछ किनारे मामलों में ऐसा करने के लिए)। यदि आप आंशिक रूप से एक इंटरफेस को कार्यान्वित करते हैं, तो आपको E_NOINTERFACE वापस नहीं करना चाहिए।

3

यदि कोई कक्षा अनुरोधित इंटरफ़ेस का पूर्ण कार्यान्वयन प्रदान नहीं करती है तो वापसी E_NOINTERFACE। यदि कोई वर्ग किसी इंटरफ़ेस फ़ंक्शन के बॉडी/लॉजिक को लागू नहीं करता है तो E_NOTIMPL लौटाएं।

2

आप इंटरफ़ेस को कार्यान्वित करते हैं (औपचारिक रूप से) E_NOINTERFACE आपके लिए नहीं है। ऐसा होता है कि आपके पास उपयोगी तरीके से लागू नहीं किए गए तरीके हैं, इसलिए आपको E_NOTIMPL वापस करना चाहिए।

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