在我的 C++ Windows 应用程序中,在重叠 I/O 操作失败后,我使用 GetLastError() 收到了似乎无效的系统错误代码。
// Code
DWORD errorCode = GetLastError();
loggerInt1(LOGERROR, "failed getIoResult, errorCode %d", (int)errorCode);
// Log file
failed getIoResult, errorCode -1073741781
failed getIoResult, errorCode -1073741781
failed getIoResult, errorCode -1073741781
//... many more times at different time points
errorCode 是一个 DWORD,它是一个无符号长整数,我将它转换为 int。但 Windows 系统错误代码应该只在 0 到 15999 之间,完全在 int 范围内。
-1073741781 在 32 位系统(我的)上是 C000 002B,在 64 位系统上是 FFFF FFFF C000 002B。解释为 unsigned long 它是 3,221,225,515(32 位)或一些非常大的数字(64 位)。无论哪种方式,它都远远超出了 Windows 系统错误的 0-15999 范围。
怎么会这样?为什么我得到这样的错误代码有合理的理由吗?