赞
踩
今天,我们来了解一下 jni.h 这个头文件,大家都知道,要想在Java中调用C语言的方法,就离不开jni,写jni代码,必须导入jni.h这个头文件。
jni头文件里都有啥?
声明数据类型的映射关系
可以简单的理解为,Java里的boolean类型对应C语言里的unsigned char类型,
在jni里有定义了一种可以直接访问的类型jboolean,以此类推。。。
继承关系
可以看出,大家都继承至_jobject{},一般的,除了之前定义的基本数据类型,其他的都是jobject 类型。
又定义了一波类型 (这个比较重要)
变量类型的签名(这个可以通过javap命令来查看方法的签名和参数的签名)
定义类变量的引用类型()
全局引用,弱引用之类的,都有各自不同的使用环境。比如说JNIGlobalRefType 很想Java里的成员变量
6.定义了method的结构体
method有三个属性name(方法名),signature(方法签名),fnptr(函数指针,指向native函数,和name属性一一对应)
*env,在C和C++里实现是不一样的,写法也不相同(参考自)
…
就是定义了JNIEnv ,它里边有很多函数指针,一个很简单的例子:
jclass objclass = (*env)->FindClass();(C 语言)
jclass objclass = env->FindClass();(C++ 语言)
跟java线程有关系的一些方法
假如你有一个需求,你需要在native方法中开启一个线程,还要在java中接收该线程的回调,怎么做,就用到了这几个方法。(具体用法我会在下下篇中写个例子)
制定和获取jni的版本
相当于get和set,可以在初始化jni的时候制定版本:比如
jint JNICALL JNI_OnLoad(JavaVM* vm, void* reserved){
return JNI_VERSION_1_4;
}
请关注我的后续介绍JNI(一) 认识JNI 中,JNI(一) 认识JNI 下
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。