我发现只有SetProcessDEPPolicy
时才会包含WinBase.h
(_WIN32_WINNT >= 0x601
)中的函数定义。为什么MingW32为Windows 7设置_WIN32_WINNT = 0x400
以排除定义?我检查了Windows 7的kernel32.dll
,它包含SetProcessDEPPolicy
功能。
答案 0 :(得分:1)
这是正常的,到底是怎么回事。
在您的应用中,您需要将_WIN32_WINNT
设置为您要定位的Windows版本,以便获得相应的API。
来自MSDN:
要编译调用此函数的应用程序,请将
_WIN32_WINNT
定义为0x0600或更高版本。
MingW最有可能设置合理的默认值(NT4.0),允许您在需要时增加它。
答案 1 :(得分:1)
我发现了SetProcessDEPPolicy的函数定义(in 仅当_WIN32_WINNT> = 0x601时才包含WinBase.h。
但是,在MSDN上,它表示您需要为Windows Vista SP1及更高版本将其定义为_WIN32_WINNT >= 0x600
。 0x601
适用于Window 7.了解有关Windows标头here的更多信息。
对于每个新版本的Windows,Windows API都会更改以添加新功能。 Windows头文件告诉编译器哪个版本的Windows可用哪个功能。
为什么MingW32为Windows 7设置_WIN32_WINNT = 0x400以排除定义?
因为如果没有,那么使用MingW编译的所有应用程序很可能仅适用于Window 7及更高版本。
在项目中定义_WIN32_WINNT
时,您只是告诉编译器您要定位的Windows版本。如果您将其定义为0x0601
以便能够调用SetProcessDEPPolicy
之类的函数,那么您的应用程序将无法在早期版本的Windows上运行。
要支持尽可能多的Windows版本,您需要将_WIN32_WINNT
降级到希望运行应用程序的最低版本的Windows。这将确保您的应用程序使用的API是您所定位的版本以及之后的版本。但这将排除在更高版本的Windows上引入的所有“新”功能。
默认情况下,MingW设置_WIN32_WINNT = 0x400
以使您的应用程序适用于所有可能的Windows版本。但是,如果您的应用程序需要调用特定版本的Windows上可用的功能,则需要将_WIN32_WINNT
更改为适当的版本才能执行此操作。