JNI数据类型
- Java Type Java数据类型
- Native Type Native层的数据类型
- Description 描述符
JNI里面的常量池
JNI中的一些变量和函数
JNI中的一些函数:像图中的
CallObjectMethod()
、CallIntMethod()
等这里写的这些方法其实只是一个调用
而已,这些方法在
NDK
的工具集里面已经实现
好了;
JNIEnv
//JNIEnv结构体的指针别名
typedef struct MYJNINativeInterface_* JNIEnv;
JNIEnv就是JNI获取Java对象、Java变量的一个上下文环境:
模仿JNI写的一段程序【指针嵌套】
#include <stdlib.h>
#include <stdio.h>
//JNIEnv结构体的指针别名
typedef struct MYJNINativeInterface_* JNIEnv;
//结构体
struct MYJNINativeInterface_
{
//函数声明
char* (*NewStringUTF)(JNIEnv*,char*);
};
//函数实现
char* NewStringUTF(JNIEnv* env, char* str){
//在NewStringUTF执行过程,仍然需要JNIEnv
return str;
}
//JNIEnv 就是一级结构体指针
//JNIEnv* 则是二级结构体指针
void main(){
//实例化结构体
struct MYJNINativeInterface_ struct_env;
struct_env.NewStringUTF = NewStringUTF;//!!!!!!!!!!
//结构体指针
JNIEnv e = &struct_env;
//结构体的二级指针
JNIEnv *env = &e;
//通过二级指针调用函数;(*env)则是一级结构体指针
char* str = (*env)->NewStringUTF(env, "test");
printf("%s", str);
system("pause");
}
- 在使用jni的时候,
我们就是跟这案例一样,使用(*env) -> 函数名
的形式,
来调用jni、NDK中准备好的函数的;
关于this
- this在Java中是指调用者本身的一个实例,
而在jni中,传的this则是struct_JNIEnv
的上下文,
即传的就是上例中说道的一级结构体指针
:
则使用JNI时候,便可以有这样的写法:
网友评论