アプリ版:「スタンプのみでお礼する」機能のリリースについて

#define BCRYPT_DH_PARAMETERS_MAGIC 0x4d504844 // DHPM

typedef __struct_bcount(cbLength) struct _BCRYPT_DH_PARAMETER_HEADER
{
ULONG cbLength;
ULONG dwMagic;
ULONG cbKeyLength;
} BCRYPT_DH_PARAMETER_HEADER;

の部分で、

1>c:\program files (x86)\microsoft sdks\windows\v6.0\include\bcrypt.h(326) : error C2065: 'cbLength' : 定義されていない識別子です。

と出るのですが、解決方法はありますか?

OS:Win7  VC++2005
を使っています。
サンプルコードをコンパイルしています。

SDKs は v6.0 と v7.1 をダウンロードしてあります。
コンパイラを新しくするのが簡単とは思いますが、、、

よろしくお願いいたします。

A 回答 (4件)

>v6.0を追加した場合、それ以外のバージョンは除外すべきです。



ちょっと補足を。
v6.0が特別というわけではなく、使うバージョンを決めたのならそれ以外のバージョンは除外すべきということです。
    • good
    • 0

>基本的には、一番古いものを使う設定なのですが


v6.0のインクルードフォルダをフルパスで追加してやって、
その優先順位を1番に設定しました。(矢印を使って一番上に持っていった。)

v6.0を追加した場合、それ以外のバージョンは除外すべきです。
ライブラリも同様。

でないと後のバージョンで追加されたAPIなどを使ったときにトラブルの元になります。

この回答への補足

いままでは、ソースコードを書き直して古いものに合わせていました。
今回初めてこの操作を知りました。

前に作ったソフトが安定して動くことが確認できたら、
最新バージョンのSDKにあるヘッダーファイルやdllを使うことにします。

v7.1は64ビット用のフォルダにあるので32ビットの
ソフトで使えるか心配です。

いろいろテストしてから、不要なものを外します。

ありがとうございました。

補足日時:2013/09/15 22:27
    • good
    • 0

解決したのならよいのですけど



>インクルードファイルの優先順位を新しいものを優先するように設定したら

これってどういう事ですか?
あるインクルードファイルをインクルードするには、その前にインクルードしないといけないインクルードファイルがあったりすることはありますけど「新しいものを優先」というのは何か変なような・・・

もしかしてv7.1とv6.0の両方がインクルードパスに存在するとかなんでしょうか。

この回答への補足

VC++2005の本来のインクルードフォルダには、かなり古いものが入っています。

v6.0の所にあるインクルードフォルダとか
v7.1の所にあるインクルードフォルダにも

それぞれ、windows.hなどが入っています。

VSのツール -- オプション設定でプロジェクトおよびソリューション
での、VC++ディレクトリー で、インクルードファイルが設定できます。
基本的には、一番古いものを使う設定なのですが
v6.0のインクルードフォルダをフルパスで追加してやって、
その優先順位を1番に設定しました。(矢印を使って一番上に持っていった。)

そしたら、v6.0のファイルを最優先でつかってくれました。
結果としてコンパイル、実行ができました。

補足日時:2013/09/15 19:45
    • good
    • 0

>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>

がインクルードファイルですが、インクルードしているものが古すぎるかもしれません。

補足日時:2013/09/15 16:27
    • good
    • 0
この回答へのお礼

ありがとうございます。

ツールで
インクルードファイルの優先順位を新しいものを優先するように設定したら
コンパイルできました。

お礼日時:2013/09/15 16:45

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!