1

所以,in 的声明GetSystemTimeswinbase.h在我的机器上,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,但这似乎不对,我找不到解释为什么会这样以及我的替代方案是什么。有人在这里有一些见解吗?

4

3 回答 3

6

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

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

于 2012-05-08T18:49:16.783 回答
3

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

于 2012-05-08T18:44:30.953 回答
-1

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>
于 2013-04-25T08:38:04.650 回答