0
GetLastError()
可以以某種方式傳遞給FormatMessageW
以獲得格式化消息。目的是在最後得到QString
。什麼是正確和安全的做法?如何獲取GetLastError的文本表示形式爲QString?
GetLastError()
可以以某種方式傳遞給FormatMessageW
以獲得格式化消息。目的是在最後得到QString
。什麼是正確和安全的做法?如何獲取GetLastError的文本表示形式爲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時,應該總是指定FORMAT_MESSAGE_IGNORE_INSERTS。有些錯誤消息確實包含佔位符,這會導致錯誤,除非您的代碼傳遞參數列表。由於我們傳遞NULL,這將是等待發生的錯誤。