我正在使用基于 Qt 4.7.0(32 位)的 Qt Creator 2.0.1。操作系统是 Windows 7 Ultimate(32 位)。
我想使用以下函数调用重新启动 Windows:
ExitWindowsEx(EWX_REBOOT, SHTDN_REASON_MAJOR_SYSTEM |
SHTDN_REASON_MINOR_NETWORK_CONNECTIVITY);
我在源代码中添加了 windows.h 和 reason.h,并在 *.pro 文件的 LIBS 部分添加了 libuser32。
编译代码后,Qt Creator 发出错误提示 SHTDN_REASON_MAJOR_SYSTEM
和 SHTDN_REASON_MINOR_NETWORK_CONNECTIVITY
未在范围内定义。
我查看了 mingw 附带的 reason.h 文件。我发现 #define
位于 #if
中:
#if (_WIN32_WINNT >= 0x0501)
我查看了 _WIN32_WINNT
的值,它似乎是 1024 (0x400)。
我知道这代表某种版本号,那些 #define
应该在特定版本之后编译。但是为什么 _WIN32_WINNT
在 Windows 7 上这么低?我如何使用那些 #define
?我不想用直接值代替 SHTDN_REASON_MAJOR_SYSTEM
和 SHTDN_REASON_MINOR_NETWORK_CONNECTIVITY
。
最佳答案
_WIN32_WINNT
的值指示您在运行时定位的 Win32 API 的版本。它与您在构建时碰巧使用的操作系统版本无关。
如果您在包含 API 头文件之前将其设置为更高的值,将有更多 API 函数和定义可用,但使用这些函数可能会导致您的应用程序拒绝在以前版本的 Windows 上运行。通常,您希望使用可以避免的最低值。
只要检查来自 Win32 函数的错误表明该值不受支持,使用更高 API 版本的 #define
值是安全的。但是,使用 Win32 函数将导致您的应用程序在启动时失败并出现诸如“未找到 DLL 导入”之类的错误。
关于c++ - 为什么 _WIN32_WINNT == 0x400 在 Windows 7 机器上的 Qt Creator 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5440551/