【vc++精品源码栏目提醒】:文章导读:在新的一年中,各位网友都进入紧张的学习或是工作阶段。
网学会员整理了vc++精品源码-JNI学习积累之一_----_常用函数大全 - 其它资料的相关内容供大家参考,祝大家在新的一年里工作和学习顺利!
JNI 学习积累之一 ---- 常用函数大全转至:http://blog.csdn.net/qinjuning最近一段时间,在工作方面比较闲,分配的 Bug 不是很多,于是好好利用这段时间就着源代码看了些许模块, 主要方式还是看代码, 同时利用烧机的便利,加 Log 观看,基本上都能弄个脸熟 。
心里想着该写点什么了?可是水平不够,再加上包括很多真正实现地方--中间层,基本上没看。
于是乎,也就不好卖弄了。
花了几天时间研究了下 JNI,基本上知道如何使用了。
照我的观点 JNI 还是不难的,难得只是我们一份尝试的心。
学习过程中, 发现关于 JNI 函数资料真的很少,所谓“工欲善其事,便先利其器”,整理出了这份资料,希望能帮助你克服 JNI 学习的坎。
主要资料来源: 百度文库的《JNI 常用函数》 。
同时对其加以了补充 。
要素 :1、 该函数大全是基于 C 语言方式的,对于 C方式可以直接转换 ,例如,对于生成一个 jstring 类型的方法转换分别如下:C 编程环境中使用方法为:env -gtNewStringUTFenv quot 123quot C编程环境中(例如,VC 下)则: env -gtNewStringUTF quot123quot 使用起来更简单2、关于下列有些函数中:isCopy 的说明,例如,如下函数:const char GetStringUTFCharsJNIEnvenv jstring string jbooleanisCopy对第三个参数 jboolean isCopy 说明如下: 当从 JNI 函数 GetStringUTFChars 函数中返回得到字符串 B 时,如果 B 是原始字符串 java.lang.String 的一份拷贝,则 isCopy 被赋值为 JNI_TRUE。
如果 B 是和原始字符串指向的是 JVM 中的同一份数据,则 isCopy 被赋值为JNI_FALSE。
当 isCopy 为 JNI_FALSE 时,本地代码绝不能修改字符串的内容,否则 JVM中的原始字符串也会被修改,这会打破 Java 语言中字符串不可变的规则。
通常,我们不必关心 JVM 是否会返回原始字符串的拷贝,只需要为 isCopy传递 NULL 作为参数 。
---- 以上内容来自 《JNI 编程指南》一、类操作jclass DefineClass JNIEnv env jobject loader const jbyte buf jsizebufLen 功能:从原始类数据的缓冲区中加载类。
参数: env JNI 接口指针。
loader 分派给所定义的类的类加载器。
buf 包含 .class 文件数据的缓冲区。
bufLen 缓冲区长度。
返回值:返回 Java 类对象。
如果出错则返回 NULL。
抛出: ClassFormatError 如果类数据指定的类无效。
ClassCircularityError 如果类或接口是自身的超类或超接口。
OutOfMemoryError 如果系统内存不足。
jclass FindClass JNIEnv env const char name 功能: 该函数用于加载本地定义的类。
它将搜索由 CLASSPATH 环境变量为具有指定名称的类所指定的目录和 zip 文件。
参数:env JNI 接口指针。
name 类全名(即包名后跟类名,之间由quot/quot分隔) “ .如果该名称以 ( 数组签名字符)打头,则返回一个数组类。
返回值:返回类对象全名。
如果找不到该类,则返回 NULL。
抛出: ClassFormatError 如果类数据指定的类无效。
ClassCircularityError 如果类或接口是自身的超类或超接口。
NoClassDefFoundError 如果找不到所请求的类或接口的定义。
OutOfMemoryError 如果系统内存不足。
jclass GetObjectClass JNIEnv env jobject obj 功能:通过对象获取这个类。
该函数比较简单,唯一注意的是对象不能为NULL,否则获取的 class 肯定返回也为 NULL。
参数: env JNI 接口指针。
obj Java 类对象实例。
jclass GetSuperclass JNIEnv env jclass clazz 功能:获取父类或者说超类 。
如果 clazz 代表类 class 而非类 object,则该函数返回由 clazz 所指定的类的超类。
如果 clazz 指定类 object 或代表某个接口,则该函数返回 NULL。
参数: env JNI 接口指针。
clazz Java 类对象。
返回值: 由 clazz 所代表的类的超类或 NULL。
jboolean IsAssignableFrom JNIEnv env jclass clazz1 jclassclazz2 功能:确定 clazz1 的对象是否可安全地强制转换为 clazz2。
参数: env JNI 接口指针。
clazz1 第一个类参数。
clazz2 第二个类参数。
返回值: 下列某个情况为真时返回 JNI_TRUE: 1、 第一及第二个类参数引用同一个 Java 类。
2、 第一个类是第二个类的子类。
3、 第二个类是第一个类的某个接口。
/////////////////////////////////////////////////////////////////////////////////////////////////////////////二、异常操作 jint ThrowJNIEnv env jthrowable obj 功能:抛出 java.lang.Throwable 对象。
参数: env JNI 接口指针。
obj java.lang.Throwable 对象。
返回值: 成功时返回 0,失败时返回负数。
抛出: java.lang.Throwable 对象 obj。
jint ThrowNew JNIEnv env jclass clazz const charmessage 功能:利用指定类的消息(由 message 指定)构造异常对象并抛出该异常。
参数: env JNI 接口指针。
clazz java.lang.Throwable 的子类。
message 用于构造 java.lang.Throwable 对象的消息。
返回值: 成功时返回 0,失败时返回负数。
抛出: 新构造的 java.lang.Throwable 对象。
jthrowable ExceptionOccurred JNIEnv env 功能:确定是否某个异常正被抛出。
在平台相关代码调用 ExceptionClear或 Java 代码处理该异常前,异常将始终保持抛出状态。
参数: env JNI 接口指针。
返回值: 如果当前无异常被抛出, 返回正被抛出的异常对象, 则返回 NULL。
void ExceptionDescribe JNIEnv env 功能:将异常及堆栈的回溯输出到系统错误报告信道(例如 stderr)。
该例程可便利调试操作。
参数:env JNI 接口指针。
void ExceptionClear JNIEnv env 功能:清除当前抛出的任何异常。
如果当前无异常,则此例程不产生任何效果。
参数: env JNI 接口指针。
void FatalError JNIEnv env const char msg 功能:抛出致命错误并且不希望虚拟机进行修复。
该函数无返回值。
参数: env JNI 接口指针。
msg 错误消息。
//////////////////////////////////////////////////////////////////////////////////////////////////////////////三、全局及局部引用jobject NewGlobalRef JNIEnv env jobject obj 功能:创建 obj 参数所引用对象的新全局引用。
obj 参数既可以是全局引用,也可以是局部引用。
全局引用通过调用 DeleteGlobalRef 来显式撤消。
参数:env JNI 接口指针。
obj 全局或局部引用。
返回值: 返回全局引用。
如果系统内存不足则返回 NULL。
void DeleteGlobalRef JNIEnv env jobject globalRef 功能: 删除 globalRef 所指向的全局引用。
参数: env JNI 接口指针。
globalRef 全局引用。
void DeleteLocalRef JNIEnv env jobject localRef 功能: 删除 localRef 所指向的局部引用。
参数: env JNI 接口指针。
localRef 局部引用。
///////////////////////////////////////////////////////////////////////////////////////////////////////////四、对象操作 jobject AllocObject JNIEnv env jclass clazz 功能:分配新 Java 对象而不调用该对象的任何构造函数。
返回该对象的引用。
clazz 参数务必不要引用数组类。
参数: env JNI 接口指针。
clazz Java 类对象。
返回值: 返回 Java 对
上一篇:
基于OpenCV的粒子滤波
下一篇:
bc80e7a0-d1f2-4595-b21d-01a76798e87a