【发布时间】:2019-07-31 10:06:39
【问题描述】:
为什么 QT 应用程序中的最后一个错误总是为零?
SetLastError(23);
qDebug() << "LastError: " << GetLastError();
预期输出: 最后错误:23
实际输出: 最后错误:0
我无法通过 Google 搜索有关此问题的任何信息。这些函数是否被 QT 钩住了?
【问题讨论】:
为什么 QT 应用程序中的最后一个错误总是为零?
SetLastError(23);
qDebug() << "LastError: " << GetLastError();
预期输出: 最后错误:23
实际输出: 最后错误:0
我无法通过 Google 搜索有关此问题的任何信息。这些函数是否被 QT 钩住了?
【问题讨论】:
DWORD lastError = GetLastError();
qDebug() << "LastError: " << lastError;
始终在 API 调用失败后立即获取最后一个错误。介入的qDebug() 和operator<< 调用自己调用Windows API 函数,这可能会或可能不会重置最后一个错误。
【讨论】:
当您调用运行时库时,它又可以调用 Win32 API 函数,并重置错误值。像这样修复你的代码:
SetLastError(23);
DWORD err = GetLastError();
qDebug() << "LastError: " << err;
这可确保您在运行时调用 Win32 函数之前读取错误值。
【讨论】: