如何使用错误代码描述winhttp错误?

时间:2014-06-10 15:31:42

标签: error-handling winhttp

我正在制作一个使用winhttp库的程序。为了处理各种异常,我创建了一个头文件。使用GetLastError()函数抛出该错误,该函数作为DWORD变量传递给异常类。但我想打印错误的描述,而不仅仅是错误号。我尝试使用FormatMessage函数,它适用于错误6但不适用于其他错误错误12002.我使用它像:

    WinHttpException(DWORD error)
    {
        LPTSTR lpszFunction = "Function";
        LPVOID lpMsgBuf;
        LPVOID lpDisplayBuf;
        DWORD dw = error; 

        FormatMessage(
            FORMAT_MESSAGE_ALLOCATE_BUFFER | 
            FORMAT_MESSAGE_FROM_SYSTEM |
            FORMAT_MESSAGE_IGNORE_INSERTS,
            NULL,
            dw,
            MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
            (LPTSTR) &lpMsgBuf,
            0, NULL );

        // Display the error message and exit the process

        lpDisplayBuf = (LPVOID)LocalAlloc(LMEM_ZEROINIT, 
            (lstrlen((LPCTSTR)lpMsgBuf) + lstrlen((LPCTSTR)lpszFunction) + 40) * sizeof(TCHAR)); 

        StringCchPrintf((LPTSTR)lpDisplayBuf, 
            LocalSize(lpDisplayBuf) / sizeof(TCHAR),
            TEXT("%s failed with error %d: %s"), 
            lpszFunction, dw, lpMsgBuf); 

        MessageBox(NULL, (LPCTSTR)lpDisplayBuf, TEXT("Error"), MB_OK); 

        m_message = boost::lexical_cast<std::string>(lpDisplayBuf);
    }

我从这个Microsoft link获得了这个代码..有没有其他方法可以做到这一点?或者我应该在FormatMessage函数中使用哪些参数来使其工作? 提前谢谢。

1 个答案:

答案 0 :(得分:2)

WinHTTP错误消息包含在winhttp.dll模块中,FormatMessage()函数允许您使用FORMAT_MESSAGE_FROM_HMODULE标志(根据FormatMessage() documentation)检索它们:

FormatMessage(
    FORMAT_MESSAGE_ALLOCATE_BUFFER | 
    FORMAT_MESSAGE_FROM_HMODULE |
    FORMAT_MESSAGE_IGNORE_INSERTS,
    GetModuleHandle(TEXT("winhttp.dll")),
    dw,
    MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
    reinterpret_cast<LPTSTR>(&lpMsgBuf),
    0, NULL);