2

私はWindows 7コンピューターを使用しているため、それを反映するためにWINVERと_WIN32_WINNTを定義しました。ただし、windows.h が含まれていると、元の #define が表示されず、値がデフォルトの 0x0400 に再定義されます。私のコードは以下です。これは、mingw g ++を使用したQTクリエーターのWindows 7 PC上にあります。なぜこれが起こっているのかについてのアイデアはありますか?

#define WINVER 0x0601
#define _WIN32_WINNT 0x0601

#if WINVER > 0x0600
#define GOOD
#endif

#include <windows.h>

#if WINVER > 0x0600
#define STILL_GOOD
#endif

#include <winuser.h>
#include <initguid.h>
#include <dbt.h>

編集: #if WINVER > 0x0600... ステートメントを使用して値を決定します。

4

3 に答える 3

3

これらの定数を定義する正しい方法は、ソース ファイルではなく、プロジェクト内にあります。このようにして、それらはコマンド ライン キーとしてコンパイルされます。

WINVERが定義されている場所は次のとおりです。

  • c:\Program Files\Microsoft SDKs\Windows\v6.0A\Include\odbcinst.h、28 行目 (1)。
  • c:\Program Files\Microsoft SDKs\Windows\v6.0A\Include\sdkddkver.h、166(2)、168(1) 行。
  • c:\Program Files\Microsoft SDKs\Windows\v6.0A\Include\WinDef.h、39 行目 (1)。
  • c:\Program Files\Microsoft SDKs\Windows\v6.0A\Include\WinGDI.h、行 43(1)。
  • c:\Program Files\Microsoft SDKs\Windows\v6.0A\Include\WinReg.h、29 行目 (1)。
  • c:\Program Files\Microsoft SDKs\Windows\v6.0A\Include\WinResrc.h、21 行目 (1)。
  • c:\Program Files\Microsoft SDKs\Windows\v6.0A\Include\WinUser.h、39 行目 (1)。

_WIN32_WINNTが定義されている場所は次のとおりです。

  • c:\Program Files\Microsoft SDKs\Windows\v6.0A\Include\ObjBase.h、行 18(1)、22(1)、26(1)、30(1)。
  • c:\Program Files\Microsoft SDKs\Windows\v6.0A\Include\ObjIdl.h、行 604(1)、607(1)、610(1)、613(1)。
  • c:\Program Files\Microsoft SDKs\Windows\v6.0A\Include\sdkddkver.h、行 151(1)。
  • c:\Program Files\Microsoft SDKs\Windows\v6.0A\Include\WinResrc.h、33 行目 (1)。

ご覧のとおり、定義は の下にあり#ifdefます。(すべての場所を確認したわけではありません)。

適切なプロジェクト、SDK の適切なバージョンなどがある場合は、プロジェクトの定義を上書きしないでください。

プロジェクトからの定義が適切に反映されていない場合、これは何かが台無しになっていることを意味します。正確に何を言うのは難しいです。

いずれにせよ、正しいパスは、プロジェクトまたはメイクファイルでこれらのパラメーターを定義することです。

于 2012-10-10T22:41:24.617 に答える
1

流れるようなアプローチを試す

#include <windows.h>

#include <winuser.h>

#ifdef WINVER
#undef WINVER
#endif

#ifdef _WIN32_WINNT
#undef _WIN32_WINNT
#endif

#define WINVER 0x0601
#define _WIN32_WINNT 0x0601

#include <initguid.h>
#include <dbt.h>
于 2012-10-10T22:34:41.667 に答える
0

他のコメントを読むと、windows.hが正しくないことがわかります。検索パスに重複するwindows.hがある可能性はありますか?

于 2012-10-10T23:25:57.903 に答える