Как получить текстовое представление GetLastError в виде QString?
GetLastError()
можно как-то передать FormatMessageW
чтобы получить отформатированное сообщение. Цель состоит в том, чтобы получить QString
в конце. Как правильно и безопасно это сделать?
1 ответ
Решение
Это делает трюк.
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, это будет ошибка, ожидающая, чтобы произойти.