我正在Windows 7上使用VS2012开发我的代码,它必须同时运行在Windows7和XP上。如果我按以下方式设置宏,那么我的代码会在 Windows 7和XP上运行吗?
#define _WIN32_WINNT 0x0601发布于 2013-09-19 13:15:00
_WIN32_WINNT定义在这里描述,http://msdn.microsoft.com/en-us/library/6sehtctf.aspx
意思是当你
#include <windows.h>只提供了_WIN32_WINNT表示的windows版本中可用的函数原型,因此可以静态链接。由于编译器只引用操作系统中用于静态链接的可用函数,所以可执行文件将工作。
但是,即使您不修改_WIN32_WINNT,只要您只使用来自目标操作系统的函数,可执行文件也会正常工作,但是很明显,您希望测试这一点,而不是依赖于您自己所知道的操作系统的每个版本中都有哪些函数可用。
如果尝试使用只使用操作系统较后版本提供的函数的可执行文件,则在运行可执行文件时,将看到一个消息框,其中写着“DLL导入未找到”。
发布于 2015-05-26 23:45:13
如果您是通过_WIN32_WINNT针对Windows的某个版本,那么该代码将使用该平台可用的所有功能。这意味着,如果您以Windows 7为目标,那么某些Win7 7及以上功能将对您可用,但这些功能在Windows上是不可用的。通常,您的可执行文件将运行在Windows 7和更高版本上,而不是在Vista或XP上。*
另一方面,如果您的目标是Windows,那么您将能够在Windows 7上运行该程序,而不会出现问题,尽管您可能会错过一些新功能。
如果您只需要在Windows 7中使用一个或两个函数,那么就有一些技术,比如使用GetProcAddress动态加载DLL和函数入口点,以便能够使用新的函数,但仍然能够在XP上运行。
*)如果您瞄准Windows 7并尝试在XP上运行,这并不是百分之百确定会发生什么。只要您将自己限制在XP中的函数子集上,并且碰巧没有使用新的标志值和没有改变大小的结构,那么它可能会运行,但当然没有保证。
https://stackoverflow.com/questions/18888204
复制相似问题