前言:我们知道Java和中基本数据类型和c中是有一些差别的,所以jni中用宏定义来转换基本数据类型如 java中的int类型 在jni中用jint(实际是long的宏定义),比如typedef long jint。
------------分割线---------
我们来看一个小案例:jni访问java中的int类型并且返回一个jni中定义的int类型
java源码:
package com.fly;
public class TestJni {
// 访问传入的java 的 传入参数 i 并且改变数值 再返回
public static native int jniForInt(int i);
public static void main(String[] args) {
int i = jniForInt(100);
System.out.println("来自c修改后的int"+i);
}
// 加载动态库
static {
System.loadLibrary("JNI");
}
}
然后接着javah生成.h文件,这里说明一下,其实我们没有必要都要自动生成,其实我们也可以自己手写,拿上一个案列的.h文件更改一下,其实套路都差不多:
然后编写01.c的代码:
#include"com_fly_TestJni.h"
JNIEXPORT jint JNICALL Java_com_fly_TestJni_jniForInt
(JNIEnv *env, jclass jcs, jint argument_int){
printf("来自java的int数值为%ld", argument_int);
//因为jint是long类型所以直接赋值
long new_int = argument_int;
new_int++;//加1后返回
return new_int;
}
生成dll文件,复制到java项目中,然后运行:
-----------分割线----------
我们再来看下其他的数据类型:
----------------完--------