1. 程式人生 > >JNI開發:Java呼叫C/C++函式傳遞Array引數並返回Array值

JNI開發:Java呼叫C/C++函式傳遞Array引數並返回Array值

             此篇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;
}