JNI開發:Java呼叫C/C++函式傳遞Array引數並返回Array值
阿新 • • 發佈:2019-01-07
此篇Java呼叫C/C++函式來實現給int陣列[12,45,67]的每個元素加17;
java呼叫:
int array[] = { 12, 45, 67 };
array = jniTools.intArray(array);
String resultStr = Arrays.toString(array);
java的native方法:
/** * JNI傳遞int型別陣列作為引數並返回int型別陣列返回值 * @param array * @return */ public native int[] intArray(int[] array);
C/C++函式:
/* * Class: com_niubashaoye_ndk_jni_JNITools * Method: intArray * Signature: ([I)[I */ JNIEXPORT jintArray JNICALL Java_com_niubashaoye_ndk_jni_JNITools_intArray( JNIEnv *env, jobject obj, jintArray array) { //獲取引數int陣列的元素個數; jsize size = env->GetArrayLength(array); //獲取int陣列的所有元素 jint *intArray = env->GetIntArrayElements(array, JNI_FALSE); //迴圈加17 for (int i = 0; i < size; i++) { intArray[i] += 17; } //根據int陣列個數來建立一個jintArray jintArray newIntArray = env->NewIntArray(size); //把jint指標中的元素設定到jintArray物件中 env->SetIntArrayRegion(newIntArray, 0, size, intArray); //返回jintArray物件 return newIntArray; }