c语言 - 为什么 Mingw32 提供的 WinBase.h 不包括 Windows 7 的"SetProcessDEPPolicy"?



我发现只有当_WIN32_WINNT >= 0x601时才包含SetProcessDEPPolicy(在WinBase.h中)的函数定义。为什么MingW32设置_WIN32_WINNT = 0x400为Windows 7排除定义?我检查了Windows 7的kernel32.dll,它包含SetProcessDEPPolicy功能。

这是正常的,这正是它应该的。

在你的应用程序中,你需要将_WIN32_WINNT设置为你要瞄准的Windows版本,这样你就可以获得适当的API。

从MSDN:

若要编译调用此函数的应用程序,请将_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更改为适当的版本才能做到这一点。

相关内容

  • 没有找到相关文章

最新更新