最近、MicrosoftのWebサイトからVS2010 Beta 1をインストールし、次のコードを生成する基本的なC++ Win32コンソールアプリケーションを起動しました。
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
return 0;
}
コードがどのように実行されるかを確認するためにコードをコンパイルしようとしましたが、その直後にいくつかの(100を超える)コンパイルエラーが発生しました。
ビルド出力の最初の部分は次のとおりです。
1>ClCompile:
1> stdafx.cpp
1>c:\program files\Microsoft visual studio 10.0\vc\include\crtdefs.h(520): error C2065: '_In_opt_z_' : undeclared identifier
1>c:\program files\Microsoft visual studio 10.0\vc\include\crtdefs.h(520): error C2143: syntax error : missing ')' before 'const'
1>c:\program files\Microsoft visual studio 10.0\vc\include\crtdefs.h(520): warning C4229: anachronism used : modifiers on data are ignored
1>c:\program files\Microsoft visual studio 10.0\vc\include\crtdefs.h(520): error C2182: '_invalid_parameter' : illegal use of type 'void'
1>c:\program files\Microsoft visual studio 10.0\vc\include\crtdefs.h(520): error C2491: '_invalid_parameter' : definition of dllimport data not allowed
1>c:\program files\Microsoft visual studio 10.0\vc\include\crtdefs.h(520): error C2059: syntax error : ')'
1>c:\program files\Microsoft visual studio 10.0\vc\include\crtdefs.h(527): error C2065: '_In_opt_z_' : undeclared identifier
1>c:\program files\Microsoft visual studio 10.0\vc\include\crtdefs.h(527): error C2143: syntax error : missing ')' before 'const'
1>c:\program files\Microsoft visual studio 10.0\vc\include\crtdefs.h(527): warning C4229: anachronism used : modifiers on data are ignored
ペーストビン 完全なリスト
インクルードファイルが以前にインストールした他のコンパイラバージョン(VS 2008もあります)と混同されているのではないかと思ったので、ヘッダーを上書きするためだけにVS2010を再インストールしましたが、あまり効果がありませんでした。
私は無力なので、あなたが提供するかもしれないどんな助けにも前もって感謝します
問題はここにあります:C:\ WinDDK\6001.18001\inc\api\sal.h
sal.hは、CRTヘッダーで使用されている注釈を定義します... DDKには独自のsal.hが含まれていますが、これは廃止されており、すべての注釈が含まれているわけではありません。
考えられる解決策は2つあります。-「C:\ ProgramFiles\Microsoft Visual Studio 10.0\VC\include」が「C:\ WindDK\6001.18001\inc\api」の前に来るようにインクルードパスを変更します。
インクルードディレクトリとして「$(IncludePath); C:\ WinDDK\6001.18001\inc\api」を使用するだけです。
インクルードパスに問題があります。 「/ showIncludes」オプション(IDEのプロジェクトオプションの「ConfigurationProperties/C/C++/Advanced/Show Includes」)を使用して、どのヘッダーがどこからインクルードされているかを確認します。
詳細については、次の質問を参照してください。
下のプロジェクトプロパティページでDDKディレクトリへのパスを追加した後、同じ問題が発生しました
Configuration Properties -> C/C++ -> Additional Include Directories
場所をに変更した後
Configuration Properties -> VC++ Directories -> Include Directories
$(IncludePath)の後にDDKへのパスを追加すると、すべて正常に機能しました。
Juriy Petrochenkovは彼の発言で正しい方向に進んでいたので、DDKディレクトリをどこに追加したかを再確認しましたが、見よ、それは間違っていました。ジュリーありがとう!
同じ問題があります。sal.h
をMicrosoft Visual Studio 10.0\VC\include
からWinDDK\7600.16385.1\inc\api\
にコピーし、Microsoft Visual Studio 10.0\VC\include\CodeAnalysis
をWinDDK\7600.16385.1\inc\api\
にコピーできます。
はい、users.propの変更は機能しますが、なんと奇妙なことでしょう。 Visual Studioのメニューからこの設定を変更したり、プロジェクトのプロパティで上書きしたりすることはできません。 $(IncludePath)を入力するだけで設定を消去しても、DDKへのデフォルトパスが使用されます。
または、C++の詳細設定の強制インクルード設定に$(VSInstallDir)\VC\include\sal.h
を追加することもできます。これにより、crtdef.h
行#include <sal.h>
が効果的に#include "sal.h"
に強制されますが、破壊性ははるかに低くなります。インクルードシステムパスではなく、現在のフォルダーを使用するように強制します。
インクルードディレクトリが親またはプロジェクトのデフォルトから継承していることがわかりました。問題は、VS2010でインクルードパスのグローバルオプションが削除されたことです。いくつか検索したところ、これらの設定を含む2つのファイル(以前のVSのインストールから)が次のディレクトリにあることがわかりました。
C:\ users\username\appdata\local\Microsoft\msbuild\v4.0 \
2つのファイルは次のとおりです。
IncludePath変数を編集します
DDKパスを削除し、ファイルを保存して、VS2010を再起動しました。これにより、すべての新しいプロジェクトの問題が解決しました。
以前のバージョンでプロジェクトをビルドしたことはありますか? stdafx.hは、msvcプロジェクトの標準のプリコンパイル済みヘッダー名です。 VS2008でビルドした場合は、プリコンパイル済みヘッダーが作成されている可能性があり、おそらくVS2010がそれを取得しています。 (慣れていない場合、プリコンパイル済みヘッダーはコンパイラーによって生成されたビルド出力であり、次回ビルドするときにヘッダーファイルのコンパイルを高速化するために保持されます。)
私は、プロジェクトディレクトリ(および、目立たない場所にある場合はビルド出力ディレクトリ)をクリーンアップしてから手動で検査し、次にフルビルドを試してみます。それでも問題が解決しない場合は、プロジェクト設定でプリコンパイル済みヘッダーを(少なくとも一時的に)オフにして再構築します。
プロジェクト->プロパティ->構成プロパティ->一般->文字セットを「マルチバイト文字セットを使用」に変更してみてください
C/C++一般「追加のインクルードディレクトリ」に移動$(SystemDrive)\ Program Files\Microsoft Visual Studio 9.0\VC\include
/ showincludesパラメーターを追加した後、次の結果が得られました。
1> Note: including file: c:\testapp\stdafx.h
1> Note: including file: c:\testapp\targetver.h
1> Note: including file: C:\Program Files\Microsoft SDKs\Windows\v7.0A\include\WinSDKVer.h
1> Note: including file: C:\WinDDK\6001.18001\inc\api\SDKDDKVer.h
1> Note: including file: C:\Program Files\Microsoft Visual Studio 10.0\VC\include\stdio.h
1> Note: including file: C:\Program Files\Microsoft Visual Studio 10.0\VC\include\crtdefs.h
1> Note: including file: C:\WinDDK\6001.18001\inc\api\sal.h
1> Note: including file: C:\Program Files\Microsoft Visual Studio 10.0\VC\include\vadefs.h
それは、何らかの理由で、VS2010インクルードディレクトリではなくDDKパスから2つのファイルをロードすることを意味します。それが実際に問題である場合、正しいパスを使用するように指示するにはどうすればよいですか?