JNI基础讲解

1. JNI基础

​ 为了承接上层java并且转换到下层c++,java 定义了一套对应类型

  1. 基本类型

    JNI类型 java类型
    jint int
    jbyte byte
    jshort jlong
    jfloat float
    jdouble double
    jchar char
    jboolean boolean
  2. java的引用类型:

    JNI引用类型 java类型
    jobject java.lang.Object
    jclass java.lang.Class
    jstring java.lang.String
    jthrowable java.lang.Throwable

    对于array,java的数组一共有八个基本类型数组和一个Object数组:

    jintArray、jbyteArray、jshortArray、jlongArray、jfloatArray、jdoubleArray、jcharArray、jbooleanArray、jobjectArray

  3. JNI的函数全都要使用JNI类型描述

    所以,当使用c/c++类型后(例如string或者char*),对外的类型要转换为JNI类型(jstring)

  4. 一般来说的步骤

    1. 将函数参数和函数返回值换成对应的JNI类型

    2. 参数分为基本类型和引用类型,基本类型可以直接操作不需要转换

      引用类型需要转换为 navive类型,比如 jstring转换为 char*

    3. 在native代码中执行具体的操作

    4. 当需要返回的时候,创建返回的类型,将结果拷贝到返回值中

  5. JNI函数中

    一般都加入

    #ifdef __cplusplus
    extern "C" {
    #endif
    
    #ifdef __cplusplus
    }
    #endif
    

    确保JNI函数是用c方式被加载

2. 本质的JNI.h

​ 这里面就定义了很多转换函数,比如JNI基本类型和native的typedef

typedef long            jint;
typedef __int64         jlong;
typedef signed char     jbyte;
 
// In "jni.h"
typedef unsigned char   jboolean;
typedef unsigned short  jchar;
typedef short           jshort;
typedef float           jfloat;
typedef double          jdouble;
typedef jint            jsize;
posted @ 2021-03-27 18:31  make_wheels  阅读(112)  评论(0编辑  收藏  举报