1

SetProcessDEPPolicy(in )の関数定義WinBase.hが含まれているのは。の場合のみであることがわかり_WIN32_WINNT >= 0x601ました。MingW32がWindows7_WIN32_WINNT = 0x400で定義を除外するように設定するのはなぜですか?kernel32.dllWindows 7)のをチェックしましたが、SetProcessDEPPolicy機能は大丈夫です。

4

2 に答える 2

1

SetProcessDEPPolicy (WinBase.h 内) の関数定義は、_WIN32_WINNT >= 0x601 の場合にのみ含まれていることがわかりました。

However, on MSDN it says you need to define it as _WIN32_WINNT >= 0x600 for Windows Vista with SP1, and later. 0x601 is for Window 7. Read more about Windows Headers here.

With every new version of Windows, the Windows API changes to add new functions. The Windows header files tells the compiler which function is available on which version of Windows.

Why MingW32 sets _WIN32_WINNT = 0x400 for Windows 7 to exclude the definition?

Because if it doesn't, then all applications compiled with MingW will most likely work only on Window 7 and later.

プロジェクトで定義するとき_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 に答える