我有类似的功能,
int * print(int count)
{
int * myarray;
int i=0;
myarray = (int *)(malloc(sizeof(int))*count);
for(i=0;i<count;i++)
{
myarray[i] = i;
}
return myarray;
}
现在我如何在使用JNI的java中使用myarray
我试过这个
jintArray Java_com_example_testmyapp_MainActivity_JListPrint(JNIEnv* env, jobject thiz)
{
return print(5);
}
和java
int a[] = JListPrint()
但是我的应用程序崩溃了
指针,建议吗?
答案 0 :(得分:5)
我发现此网站最有用:http://www3.ntu.edu.sg/home/ehchua/programming/java/JavaNativeInterface.html
#define ARRAY_LENGTH 5
jintArray Java_com_example_testmyapp_MainActivity_JListPrint(JNIEnv *env, jobject thiz)
{
jintArray intJavaArray = (*env)->NewIntArray(env, ARRAY_LENGTH);
int *intCArray = print(ARRAY_LENGTH);
if ( NULL == intJavaArray ) {
if ( NULL != intCArray ) {
free(intCArray);
}
return NULL;
}
(*env)->SetIntArrayRegion(env, intJavaArray, 0, ARRAY_LENGTH, intCArray);
return intJavaArray;
}
答案 1 :(得分:1)
Java原始数组与本机数组不同。要访问它们,您必须使用JNI函数。
对于您的代码,您需要使用:
jintArray NewIntArray()
void SetIntArrayRegion(JNIEnv *env, ArrayType array, jsize start, jsize len, NativeType *buf)