4

我正在 Windows 7 上使用 VS2012 开发我的代码。它必须在 Windows 7 和 XP 上运行。如果我将 _WIN32_WINNT 宏设置如下,我的代码会在Windows 7 和 XP 上运行吗:

#define _WIN32_WINNT 0x0601

?

4

2 回答 2

3

_WIN32_WINNT 定义在此处描述 http://msdn.microsoft.com/en-us/library/6sehtctf.aspx

这意味着当你

#include <windows.h>

仅提供由 _WIN32_WINNT 数字表示的窗口版本中可用的函数原型,因此是静态链接的。由于编译器仅引用操作系统中的可用函数来进行静态链接,因此可执行文件将起作用。

但是,即使您不修改 _WIN32_WINNT,只要您只使用目标操作系统中的函数,可执行文件应该可以正常工作,但显然您希望对此进行测试,而不是依赖于您自己对函数是什么和不是函数的了解在每个版本的操作系统中可用。

如果您尝试使用仅由更高版本的操作系统提供的功能的可执行文件,当您运行可执行文件时,您将看到一个消息框,显示“找不到 DLL 导入”。

于 2013-09-19T13:15:00.310 回答
1

如果您的目标是某个版本的 Windows,_WIN32_WINNT那么该代码将使用该平台可用的所有功能。这意味着如果您以 Windows 7 为目标,那么您可以使用某些 Win7 及更高版本的功能,但这些功能在 Windows XP 上不可用。通常,您的可执行文件将在 Windows 7 及更高版本上运行,而不是在 Vista 或 XP 上运行。*

另一方面,如果您以 Windows XP 为目标,那么您将能够在 Windows 7 上毫无问题地运行该程序,尽管您可能会错过一些新功能。

如果您需要仅在 Windows 7 中可用的一两个函数,那么可以使用动态加载 DLL 和函数入口点等技术GetProcAddress来使用新函数但仍然能够在 XP 上运行。


*) 如果您以 Windows 7 为目标并尝试在 XP 上运行,则不能 100% 确定会发生什么。只要您将自己限制在 XP 中的函数子集,并且您碰巧没有使用新的标志值并且没有使用大小发生变化的结构,那么它可能会运行,但当然没有保证。

于 2015-05-26T23:45:13.323 回答