JNI - PASS ARGUMENT. ObjectARRAY

来源:互联网 发布:c语言复制字符串函数 编辑:程序博客网 时间:2024/06/10 16:17

.java file

class ObjectArrayTest{private static native int[][] initInt2DArray(int size);public static void main(String[] args){int[][] i2arr = initInt2DArray(3);for (int i=0;i<3;i++){for (int j=0;j<3;j++){System.out.print(" " + i2arr[i][j]);}System.out.println();}}static {System.loadLibrary("ObjectArrayTest");}}

.c file

#include <jni.h>#include <stdio.h>#include "ObjectArrayTest.h"JNIEXPORT jobjectArray JNICALL Java_ObjectArrayTest_initInt2DArray  (JNIEnv *env, jclass cls, jint size){jobjectArray result;int i;//FindClass is to obtain a reference of the element class of the two-dimensinal int array. // "[I" corresponds to int[] type//jclass intArrCls = int[]jclass intArrCls = (*env)->FindClass(env,"[I");if (intArrCls == NULL){return NULL;}//allocate the 1st dimension.//It's an array of intArrCls.//It's an array of int[]result = (*env)->NewObjectArray(env,size,intArrCls,NULL);if (result == NULL){return NULL;}for (i = 0;i < size;i++){jint tmp[256];int j;jintArray iarr = (*env)->NewIntArray(env,size);if (iarr == NULL){return NULL;}for (j=0;j<size;j++){tmp[j] = i+ j;}//set iarr[0..size] to temp(*env)->SetIntArrayRegion(env, iarr, 0, size, tmp);//set the i-th element of result to be iarr(*env)->SetObjectArrayElement(env, result, i, iarr);//Delete iarr.(*env)->DeleteLocalRef(env,iarr);}return result;}


0 0
原创粉丝点击