Как выполнить «WINAPI :: GetLastError» в приложении QT? - PullRequest
0 голосов
/ 09 марта 2019

Почему последняя ошибка в приложении QT всегда равна нулю?

SetLastError(23);
qDebug() << "LastError: " << GetLastError();

ожидаемый вывод: LastError: 23

фактический вывод: LastError: 0

Я не могуGoogle что-нибудь об этой проблеме.Эти функции подключены QT?

Ответы [ 2 ]

4 голосов
/ 09 марта 2019
DWORD lastError = GetLastError();
qDebug() << "LastError: " << lastError;

Всегда получайте последнюю ошибку сразу после неудачного вызова API. Те, кто вмешивается qDebug() и operator<<, сами вызывают функции API Windows, которые могут сбрасывать или не сбрасывать последнюю ошибку.

2 голосов
/ 09 марта 2019

Когда вы выполняете вызовы библиотеки времени выполнения, она, в свою очередь, может вызывать функции Win32 API и сбрасывать значение ошибки.Исправьте ваш код следующим образом:

SetLastError(23);
DWORD err = GetLastError();
qDebug() << "LastError: " << err;

Это гарантирует, что вы прочитаете значение ошибки до того, как среда выполнения вызовет функции Win32.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...