欢迎来到天天文库
浏览记录
ID:20480008
大小:239.66 KB
页数:15页
时间:2018-10-13
《jni返回结构体参数》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、JNI返回结构体参数如何使用JNI的一些基本方法和过程在网上多如牛毛,如果你对Jni不其了解,不知道Jni是做什么的,如何建立一个基本的jni程序,或许可以参考下面下面这些文章:利用VC++6.0实现JNI的鉍简单的例了JNI入门教程之HelloWorld篇SUNJNITutorial这些资料的例子屮,大多数只是输入一些简单的参数,获取没有参数。而在实际的使用过程屮,往往耑要对参数进行处理转换◊才可以被C/C++程序识别◊比如我们在C++屮有一个结构(Struct)Disklnfo,需要传递一个类似于Disklnfo
2、*pDisklnfo的参数,类似于在C++这样参数如何传递到Java中呢?下面我们就来讨论C++到Java屮方法的一些常见参数的转换:定义NativeJava类:如果你4惯了使用JNI,你就不会觉得它难了。既然本地方法足由其他语言实现的,它们在Java屮没有函数体。但是,所有本地代码必须用本地关键词声明,成为Java类的成员。假设我们在C++中有这么一个结构,它用来描述硬盘信息:〕ava代码1.//硬盘信息2.struct{3.charname[256];4.intserial;5.}DiskInfo;那么我们需要在
3、Java中定义一个类来与之匹配,声明可以写成这样:]ava代码1.classDisklnfo{2.//名字3.publicStringname;4.5.//序列号6.publicintserial;7.}在这个类中,申明一些Native的本地方法,来测试方法参数的传递,分别定义了一些函数,用来传递结构或者结构数组,具体定义如下而代码:Java代码1.2.3.4.『本本//本木*氺*本本木**本木木氺本本*氺vi氺木**木氺*本*氺*本木氺**本本*氺///输入常川的数值类型(Boolean,Byte,Char,Sho
4、rt,Int,Float,Double)publicnativevoiddisplayParms(StringshowText,inti,booleanbl);5.//调用一个静态方法6.publicnativeintadd(inta,intb);7.7.//输入一个数组8.publicnativevoidsetArray(boolean[]blList);10.9.//返回一个字符串数组10.publicnativeString[]getStringArray();13.11.//返回一个结构12.publicna
5、tiveDisklnfogetStruct();16.13.//返冋一个结构数组14.publicnativeDisklnfo[]getStructArray();编译生成C/C++头文件定义好了Java类之后,接下來就耍写本地代码。本地方法符号提供一个满足约定的头文件,使用Java工具Javah可以很界易地创建它而不用手动去创建。你对Java的class文件使用javah命令,就会为你生成一个对应的C/C++头文件。1、在控制台下进入工作路径,本工程路径力:E:workjavaworkspaceJavaJn
6、i。2、运行javah命令:javah-classpathE:workjavaworkspaceJavaJnicom.sundy.jnidemoChangeMethodFromJni本文生成的C/C++尖义件名为:com_sundyJnidemo_ChangeMethodFromJni.h在C/C++中实现本地方法生成C/C++头文件之后,你就需耍写头文件对应的本地方法。注意:所有的本地方法的第一个参数都是指向JN旧nv结构的。这个结构是用來调用JNI函数的。第二个参数jclass的意义,要看方法是不足静态的
7、(static)或者实例(Instance)的。前者,jclass代表一个类对象的引用,而后者足被调用的方法所属对象的引用。返M值和参数类型根裾等价约定映射到本地C/C++类型,如表JNI类型映射所示。有些类型,在本地代码中可直接使用,而艽他类型只有通过JNI调用操作。表AJava类型木地类型描述booleanjbooleanC/C++8位整型bytejbyteC/C++带符号的8位整型charjcharC/C++无符号的16位整型shortjshortC/C++带符兮的16位整型intjintC/C++带符号的32
8、位整型longjlongC/C++带符号的64位整型efloatjfloatC/C++32位浮点型doublejdoubleC/C++64位浮点型Objectjobject任何Java对象,或者没有对应java类型的对象ClassjclassClass对象Stringjstring字符串对象Object[]jobjectArray任何对象的数组
此文档下载收益归作者所有