为什么GetSystemTimes #if 退出winbase.h?

Why is GetSystemTimes #if'd out of winbase.h?

本文关键字:winbase 退出 GetSystemTimes #if 为什么      更新时间:2023-10-16

所以,winbase.hGetSystemTimes的声明(在我的机器上,Windows 7 VS2005)

#if _WIN32_WINNT >= 0x0501
BOOL
WINAPI
GetSystemTimes(
    __out_opt LPFILETIME lpIdleTime,
    __out_opt LPFILETIME lpKernelTime,
    __out_opt LPFILETIME lpUserTime
    );
#endif

当然,我可以#define _WIN32_WINNT 0x0501,但这似乎不对,我找不到解释为什么会这样以及我的替代方案是什么。 有人在这里有一些见解吗?

#if了,因为它直到Windows NT v5.01(又名Windows XP)才被添加到API中。 程序应将符号_WIN32_WINNT #define为最低目标 Windows 版本的十六进制值:请参阅使用 Windows 标头。

如果未定义 _WIN32_WINNT ,则假定您以最低公分母为目标,并且不提供更新的 API 功能。 因此,如果你想使用它们,你需要将_WIN32_WINNT定义为一个适当的值,并了解你的代码不会在旧版本的Windows上运行,这通常很好 - 没有人会抱怨你的代码不能在Windows 98上运行。

根据 MSDN 文档,您提到的可能性是预期用途。 虽然我同意你的看法,这看起来很奇怪,但这种做事方式让你可以构建针对具有不同最低操作系统版本的平台的项目,所以当Windows API函数在目标计算机上不可用时,你不会感到惊讶。

GetSystemTimes() Winbase.h中声明

#if _WIN32_WINNT >= 0x0501           // look at this
BOOL
WINAPI
GetSystemTimes(
    LPFILETIME lpIdleTime,
    LPFILETIME lpKernelTime,
    LPFILETIME lpUserTime
    );
#endif // (_WIN32_WINNT >= 0x0501)

像这样使用包含:

#define _WIN32_WINNT 0x0501
#include <Windows.h>