c++ जीत एपीआई का उपयोग कर HRESULT मूल्य की स्ट्रिंग प्रस्तुति प्राप्त करने का कोई तरीका है?




windows winapi (3)

क्या जीत एपीआई में कोई फ़ंक्शन है जिसका उपयोग HRESULT मान के स्ट्रिंग प्रस्तुति को निकालने के लिए किया जा सकता है?

समस्या यह है कि एमएसडीएन में सभी रिटर्न वैल्यू दस्तावेज नहीं किए जाते हैं, उदाहरण के लिए ExecuteInDefaultAppDomain() फ़ंक्शन को "0x80070002" वापस करने के लिए प्रलेखित नहीं किया गया है - सिस्टम निर्दिष्ट फ़ाइल नहीं ढूंढ सकता है। "हालांकि, यह करता है! इसलिए, मैं सोच रहा था कि आम मामले में एक समारोह का उपयोग किया जाना है या नहीं।


आप _com_error उपयोग कर सकते हैं:

_com_error err(hr);
LPCTSTR errMsg = err.ErrorMessage();

यदि आप किसी भी कारण से _com_error का उपयोग नहीं करना चाहते हैं, तो भी आप इसके स्रोत पर एक नज़र डाल सकते हैं, और देखें कि यह कैसे किया जाता है।

हेडर comdef.h शामिल करना न भूलें


इसके लिए विंडोज एपीआई FormatMessage । यहां एक लिंक है जो बताता है कि इसे कैसे करें : FormatMessage API का उपयोग करके त्रुटि संदेश विवरण कैसे प्राप्त करें

Win32 संदेशों के लिए (HRESULT वाले संदेश जो 0x8007 से शुरू होते हैं, जो FACILITY_WIN32 है), आपको हाय ऑर्डर शब्द को निकालना होगा। उदाहरण के लिए 0x80070002 में, आपको 0x0002 के साथ FormatMessage को कॉल करने की आवश्यकता है।

हालांकि, यह हमेशा किसी भी प्रकार के संदेश के लिए काम नहीं करता है। और कुछ विशिष्ट संदेशों (एक तकनीक के लिए विशिष्ट, एक विक्रेता, आदि) के लिए, आपको संबंधित संसाधन DLL लोड करना होगा, जो हमेशा एक आसान काम नहीं है, क्योंकि आपको यह DLL खोजने की आवश्यकता है।


FormatMessage () का उपयोग करके नमूना यहां दिया गया है

LPTSTR SRUTIL_WinErrorMsg(int nErrorCode, LPTSTR pStr, WORD wLength )
{
    try
    {
        LPTSTR  szBuffer = pStr;
        int nBufferSize = wLength;

        //
        // prime buffer with error code
        //
        wsprintf( szBuffer, _T("Error code %u"), nErrorCode);

        //
        // if we have a message, replace default with msg.
        //
        FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM,
                NULL, nErrorCode,
                MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
                (LPTSTR) szBuffer,   
                nBufferSize,    
                NULL );
    }
    catch(...)
    {
    }
    return pStr;
} // End of SRUTIL_WinErrorMsg()




hresult