COM इंटरफेस विधियां अमान्य तर्क मानों को सिग्नल करने के लिए विभिन्न HRESULT
मान वापस कर सकती हैं। मैं E_POINTER
और E_INVALIDARG
कब वापस करूँ?जब E_POINTER और E_INVALIDARG वापस आते हैं?
जैसा कि मैं समझता हूं कि किसी विधि को एक encapsulated संग्रह में एक अनुक्रमणिका प्राप्त होती है और यह E_INVALIDARG
सीमा से बाहर है। यदि किसी विधि को Interface**
पॉइंटर प्राप्त होता है जहां यह एक नव निर्मित ऑब्जेक्ट को पॉइंटर स्टोर करने के लिए होता है जो E_POINTER
है।
HRESULT CImpl::GetItem(long index; Interface** result)
{
if(result == 0) {
return E_POINTER;
}
if(index < 0 || index >= internalArray.size()) {
return E_INVALIDARG;
}
*result = CreateWrapperObject(internalArray[index]);
return S_OK;
}
लेकिन क्या होगा अगर यह एक "में" पैरामीटर के रूप में एक फ़ाइल नाम के साथ एक WCHAR*
बफर प्राप्त करता है और इस WCHAR*
रिक्त है? क्या यह E_POINTER
या E_INVALIDARG
है?
या किसी विधि को कुछ संरचनाओं के लिए पॉइंटर प्राप्त होता है और उस सूचक के माध्यम से संरचना को भरने की उम्मीद है और यह सूचक शून्य है - क्या यह E_POINTER
या E_INVALIDARG
है?
HRESULT CImpl::SaveToFile(WCHAR* fileName)
{
if(fileName == 0) {
return // what to return here?
}
//... do actual work here
}
HRESULT CImpl::GetAttributes(Attributes* to)
{
if(to == 0) {
return // what to return here?
}
attributes->IsCool = getIsCool();
attributes->Color = RGB(0, 255, 0);
return S_OK;
}
जब E_POINTER
वापस जाने के लिए के लिए नियम और जब E_INVALIDARG
जब जाँच सूचक प्रकार पैरामीटर क्या हैं?
आप किसी भी दस्तावेज़ संदर्भ है? – Constantin
सहमत हुए। मैं वास्तव में इसके लिए एक एमएसडीएन संदर्भ देखना चाहता हूं। उपर्युक्त कुछ प्रकार की समझ में आता है, लेकिन कैननिकल संक्रमण होना अच्छा होगा। –
मुझे यकीन नहीं है कि यह उत्तर सही है। उदाहरण के लिए, VS2010 ' 'में,' AtlSetChildSite()' कार्यान्वयन में, 'p_PChin' पैरामीटर 'पैरामीटर' पैरामीटर वापस किया जाता है, इसके बजाय इस उत्तर के अनुसार (यदि मैं इसे सही ढंग से समझ गया हूं), 'E_INVALIDARG 'उस मामले में वापस किया जाना चाहिए था। मुझे लगता है कि एटीएल अच्छा COM प्रोग्रामिंग प्रथाओं का एक अच्छा स्रोत है, इसलिए शायद 'E_POINTER' को अमान्य (उदा।' NULL') पॉइंटर्स के सामान्य मामलों में वापस किया जाना चाहिए। लेकिन स्पष्ट रूप से मुझे यकीन नहीं है, और मैं सहमत हूं कि कुछ एमएसडीएन आधिकारिक संदर्भ अच्छा होगा। –