1

我发现SetProcessDEPPolicy(in WinBase.h) 的函数定义仅在_WIN32_WINNT >= 0x601. 为什么 MingW32_WIN32_WINNT = 0x400为 Windows 7 设置了排除定义?我检查了kernel32.dllWindows 7),它包含的SetProcessDEPPolicy功能没问题。

4

2 回答 2

1

我发现只有当 _WIN32_WINNT >= 0x601 时才包含 SetProcessDEPPolicy 的函数定义(在 WinBase.h 中)。

但是,在MSDN上,它说您需要将其定义为_WIN32_WINNT >= 0x600带有 SP1 的 Windows Vista 及更高版本。适用于 Window 7。在此处0x601阅读有关 Windows 标头的更多信息。

对于每个新版本的 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为适当的版本才能执行此操作。

于 2013-03-07T14:06:53.273 回答
1

这是正常的,也正是它应该是的样子。

在您的应用程序中,您需要设置_WIN32_WINNT您的目标 Windows 版本,以便获得适当的 API。

来自 MSDN:

要编译调用此函数的应用程序,请定义_WIN32_WINNT为 0x0600 或更高版本。

MingW 很可能设置了一个合理的默认值(NT4.0),允许您在需要时增加它。

于 2013-03-06T10:41:10.240 回答