你需要在项目==》引用==》右键添加引用(R),找到Newtonsoft.Json.dll。
添加引用后,鼠标点击JObject后再右键==》解析 即可。
来看一个传递int数组的例子,Java程序就不写了,JNIEXPORT jintJNICALL Java_IntArray_sumArray(JNIEnv *env, jobject obj, jintArray arr) { jint *carrcarr = env->GetIntArrayElements(arr, false)if(carr == NULL) { return 0/* exception occurred */ } jint sum = 0for(int i=0i<10i++) { sum += carr[i]} env->ReleaseIntArrayElements(arr, carr, 0)return sum}这个例子中的GetIntArrayElements和ReleaseIntArrayElements函数就是JNI提供用于处理int数组的函 数。如果试图用arr[i]的方式去访问jintArray类型,毫无疑问会出错。JNI还提供了另一对函数GetIntArrayRegion和 ReleaseIntArrayRegion访问int数组,就不介绍了,对于其他基本类型的数组,方法类似。二维数组和String数组在JNI中,二维数组和String数组都被视为object数组,因为数组和String被视为object。仍然用一个例子来说明,这次是一个二维int数组,作为返回值。JNIEXPORTjobjectArray JNICALL Java_ObjectArrayTest_initInt2DArray(JNIEnv *env, jclasscls, int size) { jobjectArray resultjclass intArrCls = env->FindClass("[I")result = env->NewObjectArray(size, intArrCls, NULL)for (int i = 0i <sizei++) { jint tmp[256]/* make sure it is large enough! */ jintArray iarr = env->NewIntArray(size)for(int j = 0j <sizej++) { tmp[j] = i + j} env->SetIntArrayRegion(iarr, 0, size, tmp)env->SetObjectArrayElement(result, i, iarr)env->DeleteLocalRef(iarr)} return result}上面代码中的第三行,jobjectArray result因为要返回值,所以需要新建一个jobjectArray对象。jclass intArrCls = env->FindClass("[I")是创建一个jclass的引用,因为result的元素是一维int数组的引用,所以intArrCls必须是一维int数组的引用,这一点是如何保证的 呢?注意FindClass的参数"[I",JNI就是通过它来确定引用的类型的,I表示是int类型,[标识是数组。对于其他的类型,都有相应的表示方 法,Z booleanB byteC charS shortI intJ longF floatD doubleString是通过“Ljava/lang/String”表示的,那相应的,String数组就应该是“[Ljava/lang/String”。还是回到代码,result = env->NewObjectArray(size, intArrCls, NULL)的作用是为result分配空间。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)