我发现只有当_WIN32_WINNT >= 0x601
时才包含SetProcessDEPPolicy
(在WinBase.h
中)的函数定义。为什么MingW32设置_WIN32_WINNT = 0x400
为Windows 7排除定义?我检查了Windows 7的kernel32.dll
,它包含SetProcessDEPPolicy
功能。
这是正常的,这正是它应该的。
在你的应用程序中,你需要将_WIN32_WINNT
设置为你要瞄准的Windows版本,这样你就可以获得适当的API。
若要编译调用此函数的应用程序,请将
_WIN32_WINNT
定义为0x0600或更高。
MingW很可能设置了一个合理的默认值(NT4.0),允许您根据需要增加它。
我发现SetProcessDEPPolicy(在只有当_WIN32_WINNT>= 0x601时才包含WinBase.h)。
然而,在MSDN上,它说你需要将其定义为_WIN32_WINNT >= 0x600
用于Windows Vista的SP1,以及以后的版本。0x601
用于windows 7。在这里阅读更多关于Windows头文件的信息。
每一个新版本的Windows, Windows API的变化,以增加新的功能。Windows头文件告诉编译器哪个函数在哪个版本的Windows上可用。
为什么MingW32设置_WIN32_WINNT = 0x400为Windows 7排除定义?
因为如果不这样做,那么所有用MingW编译的应用程序很可能只能在windows 7或更高版本上运行。
当你在项目中定义_WIN32_WINNT
时,你只是告诉编译器你的目标是哪个版本的Windows。如果你将0x0601
定义为能够调用SetProcessDEPPolicy
这样的函数,那么你的应用程序将无法在早期版本的Windows上运行。
要支持尽可能多的Windows版本,您需要将_WIN32_WINNT
降级到您希望应用程序运行的最低版本的Windows。这将确保您的应用程序使用的API是通用的,并且可用于您的目标版本和以后的版本。但这将排除所有在以后版本的Windows中引入的"新"功能。
MingW,默认情况下,设置_WIN32_WINNT = 0x400
使您的应用程序在所有可能的Windows版本上工作。但是,如果您的应用程序需要调用在特定版本的Windows上可用的函数,那么您需要将_WIN32_WINNT
更改为适当的版本才能做到这一点。