`
jonson
  • 浏览: 168471 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

JNI的参数传递 一二

阅读更多
最近在做android开发涉及到JNI的函数调用,总结了一些经验。
1.对于JNI中有多维数组相关参数传递的情况,可以将多维数组化为一维数组,然后进行传递。
因为在JAVA中int[3][4] 与int[12]是可以相互转化的。
2.对于一维数组的传递,记录如下:
JNIEXPORT jbyteArray JNICALL JNI_SaveAsBuffer
(JNIEnv *env,jclass clazz, ,jintarray in)
{//in is a int[][]
	jbyteArray byteArr = 0;
	MLong byteSize = 30;
        jbyte temp[30] = {0};

        jint i,j,mData[100][100]; //只是测试,固定的数组大小
        jarray myarray;
        int size = env->GetArrayLength(in);
        for (i = 0; i < size && i<100; i++)
        {
          myarray = (jarray)(env->GetObjectArrayElement(in, i));
          int col =  env->GetArrayLength(myarray);
          jint *coldata = env->GetIntArrayElements((jintArray)myarray, 0 );
          for (j=0; j<col && j <100; j++) 
          {
            mData[i][j] = coldata[j];//获取数据
          }

          env->ReleaseIntArrayElements((jintArray)myarray, coldata,0 );
         }
	byteArr = env->NewByteArray(byteSize);
	env->SetByteArrayRegion(byteArr,0,byteSize,(jbyte*)temp);
	
	return byteArr;
}

上面例子包含了多维数组的传入处理,及一维数组的返回。

对于不同类型的对象调用的创建函数是不同的,这个需要查找JNI头文件。
可以看附件

  • jni.zip (7.6 KB)
  • 下载次数: 15
分享到:
评论

相关推荐

    JNI 参数传递 Android 自定义对象

    总结,JNI参数传递涉及基本类型、自定义对象和系统对象。理解和熟练掌握这些技术对于深入Android开发和优化性能至关重要。在实际应用中,应特别注意内存管理和对象生命周期,以确保代码的稳定性和效率。通过实践和...

    JNI 传递和返回基本参数

    本文件是 JNI 传递和返回基本参数的 Demo,详细介绍见博客:https://blog.csdn.net/u011520181/article/details/79765336,无法资源分设置 0 分,也可以去博客下面的 github 地址下载

    jni数据传递demo

    例如,Java中的`int`在JNI中对应为`jint`,当调用Java方法时,我们可以将`jint`作为参数传递,反之亦然。 2. **数组传递**: JNI支持Java的一维和多维数组。对于一维数组,可以使用`GetIntArrayElements`或`...

    JNI层传递数据

    JNI层传递数据是一个关键的环节,尤其是在处理复杂数据结构时,如内部类对象和多层结构体嵌套。这种场景在系统优化、性能提升或使用第三方库时经常遇到。 首先,让我们详细了解一下JNI如何处理Java内部类对象。在...

    JNI学习二:字符串参数传递与返回值

    JNI(Java Native Interface)是Java平台的标准组成部分,它允许Java代码和其他语言写的代码...这个示例中的"JNI学习二:字符串参数传递与返回值"就是一个很好的起点,通过实践可以深入理解JNI的工作原理和使用技巧。

    JNI中C和Java参数传递详细例子

    ### JNI中C和Java参数传递详解 #### 一、引言 Java Native Interface (JNI) 是Java平台标准的一部分,用于让Java代码与其他语言写的代码进行交互。本文将深入探讨在JNI环境中,C/C++和Java之间如何进行参数传递,...

    java jni 传递汉字参数,包括 in out

    java jni 传递汉字参数,包括java传入dll 从dll传出到java 包括全部 java 代码 工程文件 全部vc++6.0 Dll 代码 工程文件 找了好久资料才完成的,传上来省的大家再走弯路。

    jni java传递对象到C

    1. **声明JNI函数**:在C/C++头文件中,我们需要声明一个JNI函数,该函数接受`JNIEnv`指针(提供访问Java虚拟机和Java对象的方法)以及`jobject`参数。 ```c JNIEXPORT void JNICALL Java_Package_Name_MethodName...

    Jni中C++和Java的参数传递

    总结来说,JNI中的参数传递涉及以下步骤: 1. 在Java中定义与C++结构体匹配的类。 2. 使用`javah`生成C/C++头文件。 3. 在C++中实现本地方法,注意使用正确的JNI类型和函数来处理参数和返回值。 4. 转换C++数据类型...

    android jni 传递对象的demo

    本示例"android jni 传递对象的demo"聚焦于一个特定的应用场景:在Java层和C/C++层之间传递对象。 首先,我们要理解在Java和C/C++之间传递对象的挑战。Java对象在JVM(Java虚拟机)中以引用的形式存在,而C/C++则不...

    JNI开发Java和C/C++互相传递List集合

    JNI开发Java和C/C++互相传递List集合, 可以参考: Java从C/C++获取List集合对象:https://blog.csdn.net/niuba123456/article/details/80994166 Java传递List集合对象到C/C++ ...

    JNI与C++数据类型传递示例(包括ArrayList对象、ArrayList嵌套返回)

    一个C++(Ubuntu16.04+QT5.9.1)通过JNI,调用JAVA类及方法的示例。通过JNI传递和返回多种类型的参数,boolean ,int,String,ArrayList,ArrayList嵌套ArrayList&lt;ArrayList&lt;String&gt;&gt;等。

    JNI 调用(包含复杂对象传参)

    实现了jni 中java向vc dll传递list参数/String参数 对象的接口。vc代码可用vc6.0运行编译,java调用接口在src\common\CameraUtil.java里面。测试了好久才实现的(涉及到项目机密,部分资源文件没有上传,内部方法是...

    java jni 传递汉字参数,读写ini

    java jni 传递汉字参数,包括java传入dll 从dll传出到java 读写ini 包括全部 java 代码 工程文件 全部vc++6.0 Dll 代码 工程文件 找了好久资料才完成的,传上来省的大家再走弯路。

    JNI开发Java调用C传递int、String、Array类型参数

    JNI开发Java调用C传递int、String、Array类型参数; 详情参考: int类型: (https://blog.csdn.net/niuba123456/article/details/80959892) String类型(https://blog.csdn.net/niuba123456/article/details/80977247);...

    Android studio JNI函数以及复杂对象传递

    在JNI中,传递基本类型(如int、float等)相对简单,直接通过参数即可。然而,处理复杂对象,如字符串、数组或自定义类,需要更多的步骤。对于Java字符串,我们可以使用`env-&gt;NewStringUTF`创建一个新的本地字符串,...

    Jni中C和Java的参数传递.doc

    总结一下,JNI 参数传递的关键点包括: 1. **类型映射**:Java 和 C++ 的数据类型不同,需要使用 JNI 提供的类型映射,如 `jint`、`jstring` 等。 2. **字段访问**:使用 JNI 的 `GetFieldID` 和 `GetObjectField`...

    JAVA +jni c# 参数传递.rar

    JNI是java调用C++程序的一种实现方法,网上有一些相关的资料,但不一定能适用,这个文档我在学习JNI时综合网上资料总结的,本人亲测能够实现,希望下载的网友有什么问题多多反馈,希望对学习JNI的朋友有所帮助

Global site tag (gtag.js) - Google Analytics