यहां सिस्टम से त्रुटि संदेश प्राप्त करने का उचित तरीका है HRESULT
(इस मामले में नामित ह्रेसल्ट, या आप इसे इसके साथ बदल सकते हैं GetLastError()
:
LPTSTR errorText = NULL;
FormatMessage(
FORMAT_MESSAGE_FROM_SYSTEM
|FORMAT_MESSAGE_ALLOCATE_BUFFER
|FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
hresult,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR)&errorText,
0,
NULL);
if ( NULL != errorText )
{
LocalFree(errorText);
errorText = NULL;
}
इस और डेविड हनाक के उत्तर के बीच महत्वपूर्ण अंतर FORMAT_MESSAGE_IGNORE_INSERTS
ध्वज का उपयोग है । एमएसडीएन थोड़ा स्पष्ट नहीं है कि सम्मिलन का उपयोग कैसे किया जाना चाहिए, लेकिन रेमंड चेन ने नोट किया कि सिस्टम संदेश को पुनर्प्राप्त करते समय आपको उनका उपयोग कभी नहीं करना चाहिए , क्योंकि आपके पास यह जानने का कोई तरीका नहीं है कि सिस्टम किस अपेक्षा को सम्मिलित करता है।
FWIW, यदि आप Visual C ++ का उपयोग कर रहे हैं, तो आप _com_error
कक्षा का उपयोग करके अपने जीवन को थोड़ा आसान बना सकते हैं :
{
_com_error error(hresult);
LPCTSTR errorText = error.ErrorMessage();
}
जहां तक मुझे पता है MFC या ATL का हिस्सा सीधे नहीं।