2017-03-11 9 views
0

にjbyteの値を設定するために、私はjbyteで動作しますが、エラーを取得しよう:ここどのように配列

Error:(12, 19) error: no viable overloaded '='. 

は私のコードです:

jint len = env->GetArrayLength(s); 
jbyteArray result = (env)->NewByteArray(len); 
jbyte *element = env->GetByteArrayElements(s,false); 
for (int i=0; i < len; i++) { 
    if(env->ExceptionOccurred()) { 
     break; 
     } 
    result[i] = *(element+i); 
    } 

間違っているのですか?

答えて

1

jbyteArrayのように書くことはできません。基になる配列へのポインタを取得するには、GetByteArrayElementsを使用する必要があります。そして、その配列で作業が終わったらReleaseByteArrayElementsを使います。

jbyte *result_bytes = env->GetByteArrayElements(result, NULL); 
.... 
result_bytes[i] = *(element+i); 
... 
// 0 = copy back the modified data if necessary 
env->ReleaseByteArrayElements(result, result_bytes, 0); 

はところでhttp://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/functions.html


を参照してください:GetByteArrayElementsの2番目の引数はjboolean*ので、GetByteArrayElements(s,false)GetByteArrayElements(s, NULL)でなければなりません。
elementを使用し終わったらReleaseByteArrayElementsに電話する必要があります。

+0

ありがとう、しかし、私はNULLを使用することはできません(宣言されていません) –

+1

それから必要なヘッダー(恐らく 'cstddef')を含めてください。 – Michael

関連する問題