web-dev-qa-db-ja.com

MFCは0x0501未満のWINVERをサポートしていません

他の多くのプロジェクト/ライブラリを参照するC++プロジェクトがあります。これは、何年も前に作成されたアプリケーション用です。 1年に1回程度更新され、新しいバージョンが作成されます。 Visual Studio 6を使用して、何年も問題なくこのアプリの新しいバージョンを更新およびビルドしてきました。

私はVisual Studio 10(および現在VS2013)に切り替えようとしています。最初に、VSバージョン間の互換性の問題に起因するいくつかの警告とエラーに遭遇しました。私はほとんどの世話をすることができました。しかし、私はまだ次のエラーに多少混乱しています。

error C1189: #error : MFC does not support WINVER less than 0x0501. Please change the definition of WINVER in your project properties or precompiled header. C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\atlmfc\include\afxv_w32.h

このエラーは、いくつかの参照プロジェクトライブラリで発生します。問題のプロジェクトライブラリをチェックしましたが、WINVERへの参照が見つかりません。

これに関する情報をインターネットで検索しましたが、いくつかのトピックが見つかりましたが、私の問題に固有のトピックはありません。ここで何が起こっているのかについて誰かが光を当てることができますか?

前もって感謝します。 LA

16
user3242337

自分で定義しなかった場合、すべてのMFCアプリはWINVERマクロ値をどこかに定義します。私は、MSが独自のヘッダーファイルの定義をデフォルトで削除しており、明示的に定義することを必須にしていると想定しています。

したがって、問題を解決するには、#defineは、「プリプロセッサ」コンパイラオプション、またはプリコンパイル済みヘッダーの先頭(stdafx.hなど)にあります。

注意 0x501はWindows XPサポートです。0x600はVista、0x601はWindows 7です。それを覚えているのはどれほど悲しいことでしょうか。

30
gbjbaanb

Visual Studio 2013を搭載したWindows 7でも同じエラーが発生しました。

私の場合、私のプロジェクトにはstdafx.hという名前のソースファイルがあり、そのファイル内には

#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x0500
#endif

に変更しました

#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x601
#endif

そしてエラーが消えました。

10

デフォルトでは、WINVERはプリプロセッサで0x0500として定義されています。このエラーを克服するには、構成プロパティ=> c/c ++ =>プリプロセッサタブから定義済みのwinバージョン "WINVER = 0x0500"を削除して再構築します。

または、エラーが発生する場所であればどこでも、コードで#define _WIN32_WINNT 0x601として上位のWIN VERSIONを提供できます。

1
Yogesh Dangre