获取最后一个错误的宽字符版本

Wide Char Version of Get last Error?

本文关键字:字符 版本 最后一个 错误 获取      更新时间:2023-10-16

这是Microsoft的代码:

void ErrorExit(LPCWSTR lpszFunction, DWORD NTStatusMessage)
{
    // Retrieve the system error message for the last-error code
    DWORD dww = 0;
    LPVOID lpMsgBuf;
    LPVOID lpDisplayBuf;
    if (NTStatusMessage)
    {
        dww = NTStatusMessage;
        FormatMessageW( 
        FORMAT_MESSAGE_ALLOCATE_BUFFER | 
        FORMAT_MESSAGE_FROM_SYSTEM | 
        FORMAT_MESSAGE_FROM_HMODULE,
        hdlNtCreateFile,
        dww,  
        MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
        (LPWSTR) &lpMsgBuf,  
        0,  
        NULL );
    }
    else
    {
        dww = GetLastError();
    FormatMessageW(
        FORMAT_MESSAGE_ALLOCATE_BUFFER |
        FORMAT_MESSAGE_FROM_SYSTEM |
        FORMAT_MESSAGE_IGNORE_INSERTS,
        NULL,
        dww,
        MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),  (LPWSTR)&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 %lu: %s"), lpszFunction, dww, lpMsgBuf);
    printf("a");  //audible bell not working yet
    MessageBoxW(NULL, (LPCTSTR)lpDisplayBuf, L"Error", MB_OK);
    LocalFree(lpDisplayBuf);
    LocalFree(lpMsgBuf);
    //ExitProcess(dw);
}

我为 NTstatus 添加了一个部分,并将参数更改为 LPCWSTR。它基本上是非功能性的,就像简单地在LPVOID类型上更改为StringCchPrintfW段错误一样。有什么方法可以使其宽字符友好吗?

此问题已通过将 _UNICODE 和 UNICODE 添加到 C/C++> 预处理器中的预处理器定义来解决。
OP 代码中的 MessageBox 调用稍作调整:感谢在Microsoft论坛上知识渊博的人。