2016-04-25 7 views
7

Visual StudioでWindowsでC++プロジェクトを開発している昔、Visual Studioバージョンには独自のバージョンのCおよびC++ライブラリがあり、プロジェクトにはヘッダーにアクセスするためにWindows SDKの特定のバージョンが参照されますWin32プラットフォームへのアクセス複数のバージョンのWindows SDKがインストールされている場合は、環境変数を含む複雑なシステムがあり、デフォルトで使用するWindows SDK Visual Studioのバージョンを選択できます。Windowsキットとは何ですか?どのように動作しますか?

これは素晴らしいことではありませんでした。正常に動作するようにするには、ちょっとした掘り出しが必要でしたが、それはちょっとした仕事でした。

VS2012からVS2015にアップグレードしただけで、このシステムがどのように置き換えられたとしても、まったく壊れているか、またはわかりません。

  1. conio.hからVS2015を含むシンプルなVS2012 C++コンソールアプリケーションをアップグレードすると、エラーは報告されずに破損します。どうして? conio.hはVisual StudioのC/C++ライブラリになくなり、代わりにWindows Kit 10に納まっています。プロジェクトをアップグレードしても、使用しているSDKは再インストールされません。

  2. VS2015で新しいHello World C++アプリケーションを作成すると、C++プロジェクトインクルードディレクトリは$(VC_IncludePath)と$(WindowsSDK_IncludePath)を継承します。 $(VC_IncludePath)がC:\ Program Files(x86)\ Windows Kits \ 10からヘッダーを取得する間、$(WindowsSDK_IncludePath)はC:\ Program Files(x86)\ Windows Kits \ 8.1からヘッダーを取得します。

アップグレードではエラーが報告されず、単純なプロジェクトのアップグレードは失敗します。新しいコンソールプロジェクトをクリーンアップすると、2つの異なるWindowsキットインストールから同時にヘッダーが取得され、C:\ Program Files(x86)\ Microsoft SDKsおよびC:\ Program Files(x86)\ Windowsキットに8.1および10のエントリが追加されました。 Windowsキット8.1にはWin32およびWinRtヘッダが含まれ、Windowsキット10にはC/C++ヘッダが含まれています。

誤って設定されているインストールが壊れていますか、それともどのようになっているのでしょうか?

この混乱があるとすれば、これはどのように機能するのですか?私はWindowsキットについての情報をMSDNで検索しようとしましたが、全く別のものだったWindows Driver Kitに関するものを除いて何も出ていませんでした。

このライブラリ構成の背後にある理論的根拠とその使用方法を説明してくれたドキュメントはありませんか?

+3

マイクロソフトは、非常に難しく、厳しい顧客があります。その名前はMicrosoftです。政治は退屈で誰の問題も解決しません。 Project> Properties> VC++ Directories> Include Directoriesの修正が必要です。 $(VC_IncludePath); $(WindowsSDK_IncludePath)を5つのディレクトリに評価します。おそらくプロジェクトが中断し、C/C++>一般>追加インクルードディレクトリ設定を使用してください。 –

+0

申し訳ありませんが、私はこの問題のどの部分を解決する必要があるのか​​、どの部分が問題になっているのかを理解することができません。あなたがコードの簡単なサンプルを提供できるなら、それはおそらく役に立ちます。 – user34660

+0

私は、Windowsキットが古いWindows SDKとどのように関係しているのか、そしてそれらの異なるバージョンで動作するようにプロジェクトを構成する方法を理解することを試みています。これは、Visual Studioプロジェクトの設定に関する質問であり、コードの問題ではありません。あなたが理解していない、またはそれほど興味がないのであれば、あなたの興味がないので、私の質問を閉じる投票はしないでください。なぜなら、良い答えが出ても他の人には非常に役立つからです。 – Neutrino

答えて

2

私はこの問題のいくつかの異なるバリエーションを数回、ヘッダーファイルとVS2012からVS2015にアップグレードされたプロジェクトのライブラリ依存関係の両方を解決する問題にぶつかりました。

私の質問に答えてハンスのコメントは確かにヘッダーの問題を解決しますが、ライブラリの依存関係に同じ問題が発生した後も、ライブラリの依存関係の解決に失敗した簡単な解決策があります。

VS2015プロジェクトをVS2015で開くと、自動アップグレードは実行されません。プロジェクトプロパティを開き、General - > Platform ToolsetをVisual Studio 2015(v140)に変更すると、元の質問に記載されているヘッダー解決エラーの変形か、別のライブラリ依存関係解決エラーが再現される可能性があります。

これらの問題を解決する最も簡単な方法は、プロジェクトプロパティを開いてVC++ディレクトリ - >ディレクトリを含めることです。VCInstallDir \ atlmfc \ include; $(WindowsSDK_IncludePath)

パスをクリックしてドロップダウンを表示し、[編集]をクリックして、上から下、明示的に定義されたパス、評価されたパス、および継承されたパスの3つのセクションを持つダイアログが表示されます。

明示的に定義されたインクルードパスから、上記の$(VCInstallDir)\ include; $(VCInstallDir \ atlmfc \ include; $(WindowsSDK_IncludePath)エントリを削除し、[親またはプロジェクトのデフォルトから継承]設定を選択します。ヘッダファイルの依存関係の問題。

ライブラリ参照の問題もある場合は、ライブラリディレクトリのエントリで同じことを行い、設定を編集し、明示的なplaformエントリを削除し、[親またはプロジェクトのデフォルトから継承]を選択します。 (VS2012のライブラリにリンクしている間に、VS2015のプラットフォームツールセットコンパイラオプションを使用して終了する可能性のあるリンカエラーが表示されない場合でも、これを行うことをお勧めします)。

似たような問題を抱えている他の誰かに出会えなかったときに、なぜこれが私のために台無しになったのか分かりません。以前はVisual Studioソリューションのアップグレードに問題はありませんでした。

以前のSDKには常にプラットフォームヘッダーが含まれていて、C++ヘッダーは常に一部またはVisual Studioのインストール時にWindowsキットのいくつかのバージョンにWindowsプラットフォームヘッダーまたはC++ライブラリヘッダーが含まれていた理由がわかりません。このような変更は、どこか別のドキュメントか、それに関するdevのブログを持っている必要があります。しかし、それが動作する限り、私はあまり気にしません。

私はこれが誰かを助けることを願っています。

+0

"WindowsキットのいくつかのバージョンにWindowsプラットフォームヘッダーまたはC++ライブラリヘッダーのいずれかが含まれている理由を知りませんでしたが... C++ヘッダーは常に一部またはVisual Studioインストールでした。 ---私はあなたがあなたのプログラムのMFCライブラリ、コンパイラ、あなたのVSのGUIなどを一緒にアップグレードするVSをアップグレードする初期の時代に思う。これは新しいプログラムでは問題ありませんが、古いプログラムでは異なるヘッダファイル、コンパイラの違いによる言語エラーなどのためにパラメータが間違っています。変更はC++ライブラリとVS GUIの汎用性の切り分けの一部と思われます。 – user3070485

関連する問題