2010-01-29 15 views
12

मैं इस FormatMessage परीक्षण करने के लिए चल रहा हूँ:FormatMessage() WinINet त्रुटियों के लिए संदेश खोजने में विफल क्यों है?

LPVOID lpMsgBuf; 
errCode=12163; 

FormatMessage(
    FORMAT_MESSAGE_ALLOCATE_BUFFER | 
    FORMAT_MESSAGE_FROM_SYSTEM , 
    0, 
    errCode, 
    0, 
    (LPTSTR) &lpMsgBuf, 
    0, NULL); 

हालांकि, जब यह रिटर्न lpMsgBuf शून्य होता है ... मैं ERROR_INTERNET_DISCONNECTED की तरह कुछ उम्मीद कर रहा था।

कुछ भी गलत दिखता है? धन्यवाद।

उत्तर

24

यह एक WinINet त्रुटि है, और इसलिए इसके साथ जुड़े संदेश WinINet.dll में रहते हैं।

FormatMessage( 
    // flags: 
    FORMAT_MESSAGE_ALLOCATE_BUFFER // allocate buffer (free with LocalFree()) 
    | FORMAT_MESSAGE_IGNORE_INSERTS // don't process inserts 
    | FORMAT_MESSAGE_FROM_HMODULE, // retrieve message from specified DLL 
    // module to retrieve message text from 
    GetModuleHandle(_T("wininet.dll")), 
    // error code to look up 
    errCode, 
    // default language 
    0, 
    // address of location to hold pointer to allocated buffer 
    (LPTSTR)&lpMsgBuf, 
    // no minimum size 
    0, 
    // no arguments 
    NULL); 

यह आधिकारिक तौर पर WinINet दस्तावेज की "Handling Errors" section तहत MSDN पर प्रलेखित है: तुम बस क्रम में FormatMessage() इस बारे में बताने के लिए यह सही संदेश को पुनः प्राप्त करने के लिए की जरूरत है।

ध्यान दें कि आप FORMAT_MESSAGE_FROM_SYSTEM झंडा आप त्रुटियों के लिए इस दिनचर्या है कि या नहीं WinINet से आया हो सकता हो सकता है उपयोग करना चाहते हैं में वापस जोड़ सकते हैं: जगह में है कि ध्वज के साथ, FormatMessage() प्रणाली संदेश की मेज पर वापस गिर जाएगी अगर त्रुटि wininet.dll में नहीं मिली है। हालांकि, do not remove the FORMAT_MESSAGE_IGNORE_INSERTS flag

+1

वाह यह नहीं पता था! –

+0

@ टॉमी क्या आप पुष्टि कर सकते हैं कि यह काम करता है? –

+3

विनिनेट के साथ काम करने से मुझे बहुत सी चीजें सिखाई गईं जिन्हें मैं विशेष रूप से कभी नहीं जानना चाहता था। :-( – Shog9