-3

JNI で 16 バイトの配列をハードコーディングし、それをメソッドで返したいと考えています。

これは機能していません

static jbyteArray JNICALL getKeyBytes(JNIEnv *env, jobject thiz) 
{
    F_LOG;
    Mutex::Autolock _m(sLock);


    jbyteArray result;  
    jbyte* resultType = new jbyte[16];  
    result = (*env)->NewByteArray(env, 16);  //line 214
    resultType = {52, 14, 25, 32, 75, 83, 35, 89, 40, 69, 35, 73, 84, 82, 35, 30};
    (*env)->SetByteArrayRegion(env, result, 0, 16, resultType);
    delete [] resultType;

    return result;
}

次のエラーが表示されます

NativeCodeCaller.cpp:214:17: エラー: '->' のベース オペランドに非ポインター型 '_JNIEnv' があります

NativeCodeCaller.cpp:215:78: 警告: 拡張イニシャライザ リストは -std=c++0x または -std=gnu++0x でのみ使用可能

NativeCodeCaller.cpp:215:78: エラー: 代入で「中括弧で囲まれた初期化子リスト>」を「jbyte*」に変換できません

NativeCodeCaller.cpp:216:8: エラー: '->' のベース オペランドに非ポインター型 '_JNIEnv' があります

簡単なヘルプはありますか?:)

4

1 に答える 1

1

このエラーは、 の代わりにbase operand of '->' has non-pointer type使用する必要があることを示しています。.->

したがって、またはを使用するかどう(*env).NewByteArray(env, 16);env->NewByteArray(env, 16);。216行目も同様です。

また、次の行 (215) で別のエラーが発生しますcannot convert "brace-enclosed initializer list>" to 'jbyte*' in assignment。これは、代入のブレース構文は、配列/ポインターを宣言する場所でのみ有効であるためです (コンパイラにも依存すると思いますが、よくわかりません)。

あなたは試してみるべきです:

jbyte resultType[16] = {52, 14, 25, 32, 75, 83, 35, 89, 40, 69, 35, 73, 84, 82, 35, 30};

お役に立てれば。

于 2012-08-31T12:00:13.513 に答える