bcrypt.h コンパイルエラー

このQ&Aのポイント
  • Windowsのbcrypt.hファイルの特定の部分でコンパイルエラーが発生しています。
  • 該当箇所には'cbLength'という定義されていない識別子が含まれています。
  • 解決方法としては、コンパイラを新しくすることが簡単な解決策ですが、OSやVC++のバージョンによっても異なる可能性があります。
回答を見る
  • ベストアンサー

bcrypt.h コンパイルエラー

#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 をダウンロードしてあります。 コンパイラを新しくするのが簡単とは思いますが、、、 よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • wormhole
  • ベストアンサー率28% (1619/5653)
回答No.4

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

その他の回答 (3)

  • wormhole
  • ベストアンサー率28% (1619/5653)
回答No.3

>基本的には、一番古いものを使う設定なのですが v6.0のインクルードフォルダをフルパスで追加してやって、 その優先順位を1番に設定しました。(矢印を使って一番上に持っていった。) v6.0を追加した場合、それ以外のバージョンは除外すべきです。 ライブラリも同様。 でないと後のバージョンで追加されたAPIなどを使ったときにトラブルの元になります。

uyama33
質問者

補足

いままでは、ソースコードを書き直して古いものに合わせていました。 今回初めてこの操作を知りました。 前に作ったソフトが安定して動くことが確認できたら、 最新バージョンのSDKにあるヘッダーファイルやdllを使うことにします。 v7.1は64ビット用のフォルダにあるので32ビットの ソフトで使えるか心配です。 いろいろテストしてから、不要なものを外します。 ありがとうございました。

  • wormhole
  • ベストアンサー率28% (1619/5653)
回答No.2

解決したのならよいのですけど >インクルードファイルの優先順位を新しいものを優先するように設定したら これってどういう事ですか? あるインクルードファイルをインクルードするには、その前にインクルードしないといけないインクルードファイルがあったりすることはありますけど「新しいものを優先」というのは何か変なような・・・ もしかしてv7.1とv6.0の両方がインクルードパスに存在するとかなんでしょうか。

uyama33
質問者

補足

VC++2005の本来のインクルードフォルダには、かなり古いものが入っています。 v6.0の所にあるインクルードフォルダとか v7.1の所にあるインクルードフォルダにも それぞれ、windows.hなどが入っています。 VSのツール -- オプション設定でプロジェクトおよびソリューション での、VC++ディレクトリー で、インクルードファイルが設定できます。 基本的には、一番古いものを使う設定なのですが v6.0のインクルードフォルダをフルパスで追加してやって、 その優先順位を1番に設定しました。(矢印を使って一番上に持っていった。) そしたら、v6.0のファイルを最優先でつかってくれました。 結果としてコンパイル、実行ができました。

  • wormhole
  • ベストアンサー率28% (1619/5653)
回答No.1

>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のインクルードだけで済みそうな気がします。

uyama33
質問者

お礼

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

uyama33
質問者

補足

ありがとうございます。 エラーメッセージは 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> がインクルードファイルですが、インクルードしているものが古すぎるかもしれません。

関連するQ&A

  • 分割コンパイルについて

    現在分割コンパイルが分からずに苦戦しています。 下記のリストは構造体を使わなければコンパイラを通すことができましたが、 使うとなぜか通りません。 あれこれ試しましたがどうしても分かりません。 何がおかしいのでしょうか? *define.hで全てのファイルへの定義や宣言を行わせています。 ////////////// //Main.cpp ////////////// #include <stdio.h> #include <conio.h> #include "define.h" int main( void ){ Tmp[0].c = 15; printf("a: %d\n", a); printf("b: %d\n", b); printf("c: %d\n", Tmp[0].c); printf("NUM:%d\n", NUM); aaa(); bbb(); getch(); return 0; } ////////////////// // A.cpp ///////////////// #include <stdio.h> #include "define.h" void aaa( void ){ printf("a: %d\n", a); printf("b: %d\n", b); printf("c: %d\n", Tmp[0].c); printf("NUM:%d\n", NUM); } ////////////////// // B.cpp ///////////////// #include <stdio.h> #include "define.h" void bbb( void ){ printf("a: %d\n", a); printf("b: %d\n", b); printf("c: %d\n", Tmp[0].c); printf("NUM:%d\n", NUM); } ////////////////// // define.cpp ///////////////// #include "define.h" int a = 10; int b = 20; struct Parameter { int c; }; struct Parameter Tmp[NUM]; ////////////////// // define.h ///////////////// #define NUM 100 extern int a; extern int b; extern struct Parameter Tmp[NUM]; void aaa( void ); void bbb( void );

  • VC++、windows.hのincludeエラー

    最近C++を勉強し始めたのですが出だしからつまづいてしまいました。 Visual Studio 2010 SP1 + Windows SDK 7.1 (OS:windows7 Professional 64bit版)を使用しているのですが、#include <windows.h> のみでビルドを行ったところ以下のように driverspecs.h でエラーが生じてしまいました。 1>c:\program files\microsoft sdks\windows\v7.1\include\driverspecs.h(356): error C2143: 構文エラー : ')' が '(' の前にありません。 1>c:\program files\microsoft sdks\windows\v7.1\include\driverspecs.h(356): error C2091: 関数は関数を返せません。 1>c:\program files\microsoft sdks\windows\v7.1\include\driverspecs.h(356): error C2059: 構文エラー : ')' <中略> 1>c:\program files\microsoft sdks\windows\v7.1\include\driverspecs.h(699): fatal error C1003: プログラム内のエラーが 100 個を超えました。コンパイルは中断されます。 1> 1>ビルドに失敗しました。 以下に driverspecs.h ファイルのエラー部分を抜粋して載せておきます。 __ANNOTATION(SAL_functionClass(__in char *);) #define __drv_functionClass(x) \ __drv_out(__drv_declspec("SAL_functionClass(\""#x"\")")) まだ始めたばかりで知識も乏しく、どのように対処をしていいものか困っています。 何か解決の糸口になるようなヒントでも構いませんので教えて頂けると助かります。 よろしくお願いします。

  • コンパイルエラー (超初心者です)

    現在C言語の勉強をしているのですがテキスト通りに打ったのですが、どうしてもエラーが出てしまいます。 #include <stdio.h> struct Car{ //構造体型struct Carの宣言 int num; double gas; }; int main() { struct Car car1; //構造体型の変数(構造体)を宣言する car1.num = 1234; //メンバに値を代入する car1.gas = 25.5; printf("車のナンバーは%d :ガソリン量は%fです。\n", car1.num, car1.gas); return 0; } エラーメッセージは 15: warninng: unknown escape sequence: '\' followed by char code 0x83 といった感じです。 ちなみにコンパイラはMingw gccというのを使っています。どなたかご回答のほうをよろしくお願いします。

  • エラーについて

    Cプログラミングについての質問です.よろしくお願いします. 以下のヘッダファイル(param.h header.h),および,mainファイル(以下はそのファイルの一部)が正しくコンパイルされるということなのですが,linuxでエラーがでます. エラー内容は error:redifinition of typedef 'gtype_t' error:previous declaration of 'gtype_t' was here です. <param.h> #define F_X pow((x),2)-2 /*探索する関数.関数への入力はx,関数からの出力はy*/ #define G_Y 1/(1+fabs(y)) /*関数の出力に対しての適合度.適合値は高いほどよいものと扱われる,f(x)=0が最良*/ #define GRAY 1 /*グレイ表現なら1,バイナリ表現なら1*/ /*GAのパラメータ群*/ #define MAX (0) /*扱う実数の最大値*/ #define MIN (255) /*扱う実数の最小値*/ #define LENGTH (8) /*遺伝子のコード長*/ #define POP (8) /*個体数*/ #define CODE_MAX 1 /*各遺伝子コードの最大値.これが1ならコードは0か1になる.ビット文字列の場合は1*/ #define GAP 0.7 /*一回の生殖で子供と入れ替わる割合*/ #define ELITE_RATE 0.8 /*そのまま残る数のうち,エリートの割合*/ #define P_MUTATE 0.13 /*突然変異率.LENGTHの逆数程度が良い.*/ #define P_CROSS 1.0 /*交叉確率*/ #define GENERATION 5 /*GAを計算する世代数*/ #define SELECTION_METHOD 1 /*1はルーレット,2はトーナメント*/ #define TOURNAMENT_SIZE 5 /*トーナメントサイズ.トーナメントのときだけ意味がある*/ /*出力*/ #define PRINT_GROUP 1 #define PRINT_FITNESS 1 <header.h> typedef int* gtype_t; typedef struct ga_individual* individual_t; struct ga_individual{ gtype_t gtype; /*遺伝子型 int配列の先頭ポインタ*/ double ptype; /*表現型*/ double fitness; /*適合度*/ individual_t next; /*線形リストでの次の個体*/ int rank; /*線形リストの中での順位(ソート後)*/ int parent1; /*交叉での親1のインデックス*/ int parent2; /*交叉での親2のインデックス*/ int cross_point; /*交叉したポイント*/ }; typedef struct ga_population* ga_population_t; struct ga_population{ individual_t genes; /*個体の線形リスト先頭へのポインタ*/ double *pselect; /*適合度の配列*/ int mutate_count; /*突然変異回数の合計*/ double max_fitness; /*適合度の最大値*/ double min_fitness; /*適合度の最小値*/ double avg_fitness; /*適合度の平均値*/ int population_size; /*集団の個体数*/ int code_length; /*遺伝子長*/ int code_max; /*各遺伝子座の最大値,ビットストリングの場合は1*/ }; <main> /*実数とバイナリ・グレイ表現への変換*/ /*与えられた実数に近い,ビットストリング型のgtypeを作る.*/ /*GRAY=1指定される時はグレイ表現に変換*/ /*最後の桁まで計算した後に残る端数切り捨て*/ typedef int* gtype_t; void encode_gtype(double value,gtype_t gtype,int code_length,double min,double max) { double gap = max-min; double remain_value = value-min; /*値のうち,遺伝子によって表現されている部分*/ double value_of_code; /*その桁の遺伝子が表現する値*/ int position = 1; int pre_code = 0; int i = 0; int tmp; /*グレイ表現変換用,一時保管変数*/ while (i<code_length){ value_of_code = gap/pow(2,position); if(remain_value >= value_of_code){ gtype[i] = 1; remain_value -= value_of_code; } else{ gtype[i] = 0; } /*グレイ表現への変換 バイナリ表現と,元のバイナリを右に1シフトしたもののXORをとる*/ if(GRAY == 1){ tmp = gtype[i]; gtype[i] = (pre_code) ^ (gtype[i]); pre_code = tmp; } position++; i++; } return; } 以上です. よろしくお願い致します.

  • コンパイルエラーについて

    現在、大学でステッピングモーターの制御についてのプログラミングについて学んでいます。 コンパイルエラーについてお力をお貸しいただけたら幸いです。 環境は windows7 VC++6.0 を使っています。 ///Motorprogram #include "Svcpp.cpp" #define JOG_P 0x32 //定速連続+方向の定義 ///X軸(定速連続+方向) //flag=ppd3test('X','+'); //動作可否の判断 if(!flag){ w_p234.axis ='X'; w_p234.cmd = jog_p; //定速連続+方向 w_p234.spd = 25; //25pps flag = hp234_writ(&w_p234); //動作開始指令 } エラーは以下の通りです。 motor-2011.cpp C:\Users\hikari\Desktop\motor-program\motor-2011.cpp(130) : error C2501: 'flag' : 識別名を宣言するのに、型が指定されていません。 C:\Users\hikari\Desktop\motor-program\motor-2011.cpp(130) : error C2065: 'ppd3test' : 定義されていない識別子です。 C:\Users\hikari\Desktop\motor-program\motor-2011.cpp(131) : error C2143: 構文エラー : ';' が 'if' の前に必要です。 C:\Users\hikari\Desktop\motor-program\motor-2011.cpp(131) : error C2143: 構文エラー : ';' が '{' の前に必要です。 C:\Users\hikari\Desktop\motor-program\motor-2011.cpp(131) : error C2447: グローバルスコープで中カッコ ({) が見つかりましたが、対応する関数ヘッダーがありません。 cl.exe の実行エラー motor-2011.obj - エラー 5、警告 0 includeについてはきちんと読み込んでいるので問題ないかと思います。 パルス出力ボードについては HPC-PPD234 を使用しています。 コマンドはマニュアルに沿ったものを使っています。 よろしくお願いいたします。

  • C言語 #defineについて

    C言語でどの様に考えれば良いか分からない事があるので、教えて下さい。 以下の様な行が出てきたのですが、どういう意味なのでしょうか? #define SYSTEM (*(volatile struct st_system *)0x80000) 現状分かっている事は 1.#define ABC 100   ならこれ以降で出てくるABCは100と読み替える。 2.volatileはコンパイラの最適化を抑制する様な意味。 とい事です。 以上、宜しくお願い致します。

  • C++/C#間での構造体の引き渡し方法に関して

    現在、C++で作成したクラスを、 C#から呼び出し実行しようとしております。 引数として、構造体を利用したいので、 C++側、C#側でそれぞれ下記のように 構造体を定義しました。 【C++】 typedef struct _Msg { ULONG Code; ULONG sessionId; }Msg; 【C#】 [StructLayout(LayoutKind.Sequential)] public struct Msg { public uint Code; public uint sessionId; } そして、下記のようにC++側で定義したクラスを C#側で呼び出そうとしたのですが、 「Msg*から_Msg*に変換できません」という コンパイルエラーが発生してしまいました。 構造体の定義は同じものになっていると思うのですが、 この原因は何だと考えられるでしょうか。 よろしくお願いいたします。 【C++】 ULONG Wrap::API( Msg* sample_Msg ) { return 1; } 【C#】 Msg sample_msg; Wrap.API(&sample_msg);

  • C#とC++/CLI間でポインタが指す内容が変わる

    現在、C++/CLIプログラムをC#で使う必要があり、 C++/CLIで定義したメソッドとクラスでC#側とやり取りする必要が生じております。 以下の書き方で、C++/CLIとC#間のクラスのやり取りはできたのですが、 C++/CLI側で定義されているメソッド内で、ポインタが指し示す値(*id.head)が変わってしまいます(文字化けみたいな感じになる)。 引き渡したポインタ変数の値は一致しているのですが、 どうすれば、C++/CLI側で値を正しく取得できるのでしょうか?。 【C++/CLI側で定義されているクラス】 public value class class1 { public : ULONG code; header    *head; }; typedef struct _header { CHAR achCHdrType[2]; CHAR achMsgLen[2]; } header ; 【C++/CLI側で定義されているメソッド】 ULONG session::open(class1& id) { return session_oepn(id.code, *id.head) } 【C#側でのメソッド参照】 class1 c1 = new class1(); uint status = session.open(&c1); よろしくお願いします。

  • AIXでの cc コンパイルエラーについて

    お世話になります。 Severもcもまったくわからない初心者なのですが質問させていただきます。 AIXへの移植が必要になり、RHEL6.1(x86)では開発が終了しているCソースをAIXでコンパイルを行ったところ、下記のようなエラーが出て最後までMakeが実行できません。 <ccを指定してコンパイル> "../program.c", line 1222.17: 1506-021 (S) Expecting struct or union. <"../program.c", > ~ #include <sys/types.h> #include <sys/wait.h> ~ int rc,sh_rc; ~ aa_rc = WEXITSTATUS(rc); <== line 1222の部分 ~ OS=AIX 7.1.0.0 Cコンパイラ=vac.C 11.1.0.4 COMMITTED IBM XL C Compiler Makeを実行したいのですがどうしたらよいでしょうか。教授頂けると幸いです。

  • 【VC++】 学校のプロジェクトを家で続けたい

    学校で使っているVisual Studio2010で使っているプロジェクト(ソリューション)を、家のPCのVisual C++ 2010 Expressで使いたいのですが、エラーが出てうまく移行できません。 家のPCをうまく設定して学校のPCと両方でプロジェクトを使いたいのですがどうすれば良いのでしょうか。 もしかすると、以前設定を変更してデフォルトの状態ではないかもしれません… //インクルード文 #include "DxAll3.h" //エラーメッセージ(抜粋) 1>C:\Program Files\Microsoft SDKs\Windows\v7.0A\include\driverspecs.h : warning C4821: Unicode エンコードの種類を指定できません。シグネチャ (BOM) つきファイルを保存してください。 1>C:\Program Files\Microsoft SDKs\Windows\v7.0A\include\driverspecs.h : warning C4819: ファイルは、現在のコード ページ (932) で表示できない文字を含んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存してください。 1>C:\Program Files\Microsoft SDKs\Windows\v7.0A\include\driverspecs.h(1): error C2018: 文字 '0x4' は認識できません。 1>C:\Program Files\Microsoft SDKs\Windows\v7.0A\include\driverspecs.h(1): error C2018: 文字 '0x6' は認識できません。 1>C:\Program Files\Microsoft SDKs\Windows\v7.0A\include\driverspecs.h(1): error C2018: 文字 '0x2' は認識できません。 1>C:\Program Files\Microsoft SDKs\Windows\v7.0A\include\driverspecs.h(1): error C2018: 文字 '0x7' は認識できません。 1>C:\Program Files\Microsoft SDKs\Windows\v7.0A\include\driverspecs.h(1): error C2146: 構文エラー : ';' が、識別子 'Ntff' の前に必要です。 以下100エラーでコンパイル中断。

専門家に質問してみよう