- ベストアンサー
bcrypt.h コンパイルエラー
- Windowsのbcrypt.hファイルの特定の部分でコンパイルエラーが発生しています。
- 該当箇所には'cbLength'という定義されていない識別子が含まれています。
- 解決方法としては、コンパイラを新しくすることが簡単な解決策ですが、OSやVC++のバージョンによっても異なる可能性があります。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>v6.0を追加した場合、それ以外のバージョンは除外すべきです。 ちょっと補足を。 v6.0が特別というわけではなく、使うバージョンを決めたのならそれ以外のバージョンは除外すべきということです。
その他の回答 (3)
- wormhole
- ベストアンサー率28% (1626/5665)
>基本的には、一番古いものを使う設定なのですが v6.0のインクルードフォルダをフルパスで追加してやって、 その優先順位を1番に設定しました。(矢印を使って一番上に持っていった。) v6.0を追加した場合、それ以外のバージョンは除外すべきです。 ライブラリも同様。 でないと後のバージョンで追加されたAPIなどを使ったときにトラブルの元になります。
- wormhole
- ベストアンサー率28% (1626/5665)
解決したのならよいのですけど >インクルードファイルの優先順位を新しいものを優先するように設定したら これってどういう事ですか? あるインクルードファイルをインクルードするには、その前にインクルードしないといけないインクルードファイルがあったりすることはありますけど「新しいものを優先」というのは何か変なような・・・ もしかしてv7.1とv6.0の両方がインクルードパスに存在するとかなんでしょうか。
補足
VC++2005の本来のインクルードフォルダには、かなり古いものが入っています。 v6.0の所にあるインクルードフォルダとか v7.1の所にあるインクルードフォルダにも それぞれ、windows.hなどが入っています。 VSのツール -- オプション設定でプロジェクトおよびソリューション での、VC++ディレクトリー で、インクルードファイルが設定できます。 基本的には、一番古いものを使う設定なのですが v6.0のインクルードフォルダをフルパスで追加してやって、 その優先順位を1番に設定しました。(矢印を使って一番上に持っていった。) そしたら、v6.0のファイルを最優先でつかってくれました。 結果としてコンパイル、実行ができました。
- wormhole
- ベストアンサー率28% (1626/5665)
>1>c:\program files (x86)\microsoft sdks\windows\v6.0\include\bcrypt.h(326) : error C2065: 'cbLength' : 定義されていない識別子です。 出力されている警告&エラーメッセージはこれだけじゃないですよね? __struct_bcount についても警告かエラーメッセージが出力されてると思うんですけど。 __struct_bcount のdefineはspecstrings.hとspecstrings_strict.hの2ヶ所あって異なる内容なのでどちらを用いるべきかはわかりませんし、おそらく他のインクルードファイルも必要になってくる気がします。 ただ何となくですがbcrypt.hやspecstrings.h, specstrings_strict.hはユーザー側でそれ単独でインクルードする事は考えられてなくて、Windows.hのインクルードだけで済みそうな気がします。
お礼
ありがとうございます。 ツールで インクルードファイルの優先順位を新しいものを優先するように設定したら コンパイルできました。
補足
ありがとうございます。 エラーメッセージは 1>コンパイルしています... 1>cryptapi.cpp 1>c:\program files (x86)\microsoft sdks\windows\v6.0\include\bcrypt.h(326) : error C2065: 'cbLength' : 定義されていない識別子です。 1>c:\program files (x86)\microsoft sdks\windows\v6.0\include\bcrypt.h(327) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません 1>c:\program files (x86)\microsoft sdks\windows\v6.0\include\bcrypt.h(327) : error C2513: 'int' : 指定された型は、識別子の名前を指定せずに宣言されています。 1>c:\program files (x86)\microsoft sdks\windows\v6.0\include\bcrypt.h(327) : error C2143: 構文エラー : ';' が '<クラスヘッド>' の前にありません。 1>ビルドログは "file://c:\Users\Uyama\Documents\Visual Studio 2005\Projects\PCSprj\PCSWebATJGY(SJ-5)\cryptapi\Debug\BuildLog.htm" に保存されました。 1>cryptapi - エラー 4、警告 0 です。 #include <windows.h> #include <stdio.h> #include <bcrypt.h> がインクルードファイルですが、インクルードしているものが古すぎるかもしれません。
補足
いままでは、ソースコードを書き直して古いものに合わせていました。 今回初めてこの操作を知りました。 前に作ったソフトが安定して動くことが確認できたら、 最新バージョンのSDKにあるヘッダーファイルやdllを使うことにします。 v7.1は64ビット用のフォルダにあるので32ビットの ソフトで使えるか心配です。 いろいろテストしてから、不要なものを外します。 ありがとうございました。