2010-01-29 4 views
12

나는이 FormatMessage을 테스트하는 중이에요 :FormatINessage()가 WinINet 오류 메시지를 찾지 못하는 이유는 무엇입니까?

그러나
LPVOID lpMsgBuf; 
errCode=12163; 

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

lpMsgBuf에 Null이 반환 될 때, ... 나는 ERROR_INTERNET_DISCONNECTED 같은 것을 기대하고 있었다.

아무 것도 보이지 않습니까? 감사.

답변

24

WinINet 오류이므로 WinINet.dll과 관련된 메시지가 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()을 말할 필요가있다. 다시 당신이 나 하지는이 WinINet에서 온 수 수있는 오류에 대해이 일상적인 사용하려는 경우에 FORMAT_MESSAGE_FROM_SYSTEM 플래그를 추가 할 수 있습니다

참고 : 위의 해당 플래그는 FormatMessage() 시스템 메시지 테이블에 다시 떨어질 것이다 wininet.dll에 오류가없는 경우 그러나 do not remove the FORMAT_MESSAGE_IGNORE_INSERTS flag.

+1

와우는 이것을 알지 못했습니다! –

+0

@ 토미가 작동하는지 확인할 수 있습니까? –

+3

WinINet을 사용한 작업은 내가 특별히 알고 싶지 않은 많은 것을 가르쳐주었습니다. :-( – Shog9