Qt 如何获取GetLastError作为QString的文本表示?

Qt 如何获取GetLastError作为QString的文本表示?,qt,winapi,getlasterror,qtcore,Qt,Winapi,Getlasterror,Qtcore,GetLastError()可以通过某种方式传递到FormatMessageW以获取格式化消息。目标是在最后得到一个QString。正确和安全的方法是什么?这就是关键 QString getLastErrorMsg() { LPWSTR bufPtr = NULL; DWORD err = GetLastError(); FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_M

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

这就是关键

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时,应始终指定格式\u消息\u忽略\u插入。某些错误消息确实包含占位符,这将导致错误,除非您的代码通过参数列表。由于我们正在传递NULL,这将是等待发生的bug