2
JNIを使用してJavaからC++へ2Dバイト配列を渡したいと思っていましたが、すべてうまく見えますが、3番目の配列の値を取得できません。2D bytearrayをCに渡すJNY
のJava:
byte[][] b = new byte[3][];
byte[] b1= new byte[]{0x1,0x2,0x3,0x4};
byte[] b2= new byte[]{0x5,0x6,0x7,0x8};
byte[] b3= new byte[]{0x9,0x9,0x9,0x9};
b[0]=b1;
b[1]=b2;
b[2]=b3;
sendData(b);
C++:私が得る
JNIEXPORT jbyteArray JNICALL Java_jni_JniExample_sendData___3_3B
(JNIEnv *env, jobject obj, jobjectArray data)
{
jboolean isCopy;
uint8_t** y = new uint8_t*[3];
for(int i=0;i<3;i++)
{
jbyteArray bytearray = (jbyteArray)env->GetObjectArrayElement(data, i);
y[i] = (uint8_t *)env->GetPrimitiveArrayCritical(bytearray, &isCopy);
cout << i << " " << y[i] << endl;
}
}
出力は次のようになります。
0 0x1 0x2 0x3 0x4
1 0x5 0x6 0x7 0x8
2
私は3番目の配列の値に到達することはできません。 GetPrimitiveArrayCriticalを正しく使用していますか?
注:isCopyはFYIのみです。とにかくそれを使用していないので、 '&isCopy'の代わりに' NULL'を渡すこともできます。 –