Как получить текстовое представление 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, это будет ошибка, ожидающая, чтобы произойти.

Другие вопросы по тегам