使用JNI将C中的int数组转换为Java中的int数组

4

我有一个类似于以下代码的函数:

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()

但我的应用程序崩溃了。 有什么指针或建议吗?
2个回答

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
Java基本数组与本地数组不同。要访问它们,您必须使用JNI函数。
对于您的代码,您将需要使用:
- jintArray NewIntArray() - void SetIntArrayRegion(JNIEnv *env, ArrayType array, jsize start, jsize len, NativeType *buf)
请参阅Oracle有关这些JNI函数的文档

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接