JNIEXPORT jobject JNICALL Java_com_test_Emv_getStu(JNIEnv *env, jobject obj) {
jclass clazz = (*env)->FindClass(env, "com/test/Student");
jmethodID constrocMID = (*env)->GetMethodID(env, clazz, "<init>",
"(ILjava/lang/String;)V");
char* response = "\x01\xA1";
int size = strlen(response);
jbyteArray ret = (*env)->NewByteArray(env, size);
(*env)->SetByteArrayRegion(env, ret, 0, size, (jbyte*) response);
jobject param_obj = (*env)->NewObject(env, clazz, constrocMID, 11, ret);
return param_obj;
}我需要返回一个对象,对象里有一个byte[]的属性,。我这里每次运行到最后一步
jobject param_obj = (*env)->NewObject(env, clazz, constrocMID, 11, ret);就报错了。、
下面是对应的测试的javaBean
public class Student {
public int age;
public byte[] code;
public Student() {
}
public Student(int str, byte[] buff) {
this.age = str;
this.code = buff;
}
}请帮忙分析下哪里错了?
JNI 对象 Java C
------解决方案--------------------
看你的构造函数签名是"(ILjava/lang/String;)V",
但是你调用的时候第二个参数传入的却是一个byte数组,
如果不是笔误的话,你可以先用NewStringUTF把byte数组转成String,再调用构造函数
------解决方案--------------------
(*env)->SetByteArrayRegion(env, ret, 0, size, (jbyte*) response);
这一行, 把指针类型转换(jbyte*) 去掉, 直接传char*