访谒JNI函数:JNIEnv自变量[Java编程]
本文“访谒JNI函数:JNIEnv自变量[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
操纵JNI函数,程序员可从一个固有办法的内部与JVM打交道.正如大家在前面的例子中看到的那样,每个JNI固有办法城市接纳一个特别的自变量作为自己的第一个参数:JNIEnv自变量——它是指向范例为JNIEnv_的一个特别JNI数据构造的指针.JNI数据构造的一个元素是指向由JVM生成的一个数组的指针;该数组的每个元素都是指向一个JNI函数的指针.可从固有办法的内部发出对JNI函数的调用,做法是撤消对这些指针的引用(具体的操作实际很简单).每种JVM都以自己的方法实现了JNI函数,但它们的地址必定位于预先定义好的偏移处.
操纵JNIEnv自变量,程序员可拜候一系列函数.这些函数可划分为下述类别:
■获得版本信息
■举行类和对象操作
■掌握对Java对象的全局和部分引用
■拜候实例字段和静态字段
■调用实例办法和静态办法
■履行字串和数组操作
■产生和掌握Java非常
JNI函数的数目相当多,这里不再详述.相反,我会向大家揭露利用这些函数时背后的一些基本原理.欲理解更具体的情形,请参阅自己所用编译器的JNI文档.
若察看一下jni.h头文件,就会发目前#ifdef _cplusplus预处理器条件的内部,当由C++编译器编译时,JNIEnv_构造被定义成一个类.这个类包含了大量内嵌函数.通过一种简单并且熟习的语法,这些函数让我们可以安闲拜候JNI函数.比方,前例包含了下面这行代码:
(*jEnv)->ReleaseStringUTFChars(jEnv, jMsg,msg);
它在C++里可改写成下面这个模样:
jEnv->ReleaseStringUTFChars(jMsg,msg);
大家可注意到自己不再需求同时撤消对jEnv的两个引用,相同的指针不再作为第一个参数传送给JNI函数调用.在这些例子剩下的地方,我会利用C++气势的代码.
1. 拜候Java字串
作为拜候JNI函数的一个例子,请考虑上述的代码.在这里,我们操纵JNIEnv的自变量jEnv来拜候一个Java字串.Java字串采纳的是Unicode格局,所以假如收到这样一个字串,并想把它传给一个非Unicode函数(如printf()),首先必须用JNI函数GetStringUTFChars()将其转换成ASCII字符.该函数能接纳一个Java字串,然后把它转换成UTF-8字符(用8位宽度包容ASCII值,或用16位宽度包容Unicode;若原始字串的内容完好由ASCII构成,那么后果字串也是ASCII).
GetStringUTFChars是JNIEnv间接指向的那个构造里的一个字段,而这个字段又是指向一个函数的指针.为拜候JNI函数,我们用传统的C语法来调用一个函数(通过指针).操纵上述情势可实现对全部JNI函数的拜候.
以上是“访谒JNI函数:JNIEnv自变量[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |