2016-07-16 13 views
1

JNIを作成するために "g ++"を実行すると、 "型名を指定しません"というエラーが発生します。'BYTE'はタイプに名前を付けません。 'BOOL'は宣言されていません

g++ -shared -o finger.dll FingerPrintJNI.c 

次は、ヘッダーファイルは次のようになりますエラーメッセージ

In file included from FingerPrintJNI.c:4:0: 

IMM64.h:21:2: error: 'BYTE' does not name a type 
BYTE Data[MAX_FEATUREVECT_LEN]; 
^~~~ 

IMM64.h:26:2: error: 'BYTE' does not name a type 
BYTE Data[MAX_INDEXINFO_LEN]; 
^~~~ 

IMM64.h:31:2: error: 'BYTE' does not name a type 
BYTE Data[MAX_INDEXINFO_LEN_1]; 
^~~~ 

IMM64.h:44:2: error: 'BYTE' does not name a type 
BYTE kind; 
^~~~ 

IMM64.h:55:2: error: 'BYTE' does not name a type 
BYTE kind; 
^~~~ 

IMM64.h:73:2: error: 'BOOL' has not been declared 
BOOL *bResult, unsigned int *uiMatchScore, unsigned int *uiHit, Pair_t *hCPairs = NULL); 

です。 (私はセキュリティ上の理由に全体のコードを共有することはできません)

XXX_API char * __stdcall XXXXDCI_GetVer(); 

ここで質問です。

  1. "BYTE"は大文字として宣言されています。 Visual Studioと関係がありますか?

  2. ヘッダーファイルには "__stdcall"があります。ヘッダーファイルがC++であることを意味しますか?

  3. 上記のヘッダーファイルを使用してJNIを作成する必要があります。私は何をしなければならないのですか? g ++コンパイラでもできますか?またはgccコンパイラ? Visual Studioなしで?

答えて

1
  1. ​​とBOOLそれぞれunsigned charintとしてwindows.h#definedあります。 #include<windows.h>#define WINDOWS_LEAN_AND_MEANまたはtypedef以降が可能です。
  2. __stdcallは、WinAPI関数で使用される標準の呼び出し規約です。
  3. それに関するStackoverflowに関する他の回答を確認してください。ここで詳述されている内容を複製する必要はありません。
0

私は非常によく似たエラーメッセージ(ただし、Linux上で)を有していました。 <cstdint>で定義されているint8_t、uint8_t、int16_t、int64_tのなど、同じようなタイプを好む - 私はgoogle c++ style guideに勧告に従うことによってそれを解決することを決めました。だから、BYTEの場合、私はuint8_tを使っています。この解決策は、がLinuxおよびWindowsに適用されますもあります。

関連する問題