如何将GetLastError的文本表示形式作为QString?

时间:2013-10-03 04:10:06

标签: qt winapi getlasterror qtcore

GetLastError()可以某种方式传递给FormatMessageW以获取格式化的消息。目标是在最后获得QString。这样做的正确和安全的方法是什么?

1 个答案:

答案 0 :(得分:8)

这就是诀窍。

QString getLastErrorMsg() {
    LPWSTR bufPtr = NULL;
    DWORD err = GetLastError();
    FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER | 
                   FORMAT_MESSAGE_FROM_SYSTEM |
                   FORMAT_MESSAGE_IGNORE_INSERTS,
                   NULL, err, 0, (LPWSTR)&bufPtr, 0, NULL);
    const QString result = 
        (bufPtr) ? QString::fromUtf16((const ushort*)bufPtr).trimmed() :
                   QString("Unknown Error %1").arg(err);
    LocalFree(bufPtr);
    return result;
}

在调用FormatMessage时,应始终指定FORMAT_MESSAGE_IGNORE_INSERTS。一些错误消息确实包含占位符,这将导致错误,除非您的代码传递参数列表。由于我们传递了NULL,这将是等待发生的错误。