この回答は VS10 向けですが、VC++ ディレクトリ マクロで何が起こっているのかについていくつかの手がかりを提供する可能性があるため、興味深いものです。これらのステートメントがプロジェクト MyApp のヘッダー ファイルに追加されたときに警告が表示されました。
#ifndef NTDDI_WINXPSP3
#define NTDDI_WINXPSP3 0x05010300
#endif
#ifndef NTDDI_VISTA
#define NTDDI_VISTA 0x06000000
#endif
#ifndef NTDDI_VISTASP1
#define NTDDI_VISTASP1 0x06000100
#endif
#ifndef NTDDI_WS08
#define NTDDI_WS08 0x06000100
#endif
XPSP3 定義以外のすべてに対して、次のような警告が表示されます。
警告 RC4005: 'NTDDI_VISTASP1': 再定義 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\sdkddkver.h.., MyApp
MyApp は WinDebug 32 ビルドであり、proj ファイルの X64 セクションに Windows7.1SDK が表示されていることに注意してください。
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<PlatformToolset>Windows7.1SDK</PlatformToolset>
プリプロセッサ定義の継承された値は _VC80_UPGRADE=0x0600 でした。V100 に戻す前に SDK ツールセットを使用すると、SDK ライブラリは、ここに記載されているように、VC++ ディレクトリセクションのインクルード ディレクトリとライブラリ ディレクトリでinherited_fromとして検出されました。
アップグレード、移行、またはツールセットの変更が組み合わされた結果、警告が生成されたようです。
編集:VS2017(MBCS)の無関係な問題は、使用することを選択しています
LoadCursorW(nullptr, IDC_ARROW)
LoadCursorA(...)
WNDCLASSEXW 構造体のデフォルトの代わりに。考えられる解決策は、次のように再定義することです。
#define IDC_ARROW MAKEINTRESOURCEW(32512)
ここで、前の#undef
手順を使用して警告を抑制することができます#define
。
#ifdef IDC_ARROW
#undef IDC_ARROW
#endif
#define IDC_ARROW MAKEINTRESOURCEW(32512)