命令:javah 类名, 注:不需要class后缀
4.将(.h)头文件复制到vs下,创建(.cpp)或者(.c)文件实现(.h)头文件声明的方法
5.实现完成后,编译成dll库
6.将dll复制到...java项目的根目录,调用System.loadLibrary("dll库名"); //注:不要dll后缀
7.在代码里面调用native方法,访问native(.cpp 或者 .c)的代码
具体实现...方法来注册 java 方法与 JNI 函数的一一对应关系
实现流程
利用结构体 JNINativeMethod 数组记录 java 方法与 JNI 函数的对应关系;
实现 JNI_OnLoad 方法,在加载动态库后...是用于描述方法的参数与返回值,方法的签名
fnPtr 是函数指针,用来指向 jni 函数
区别:
静态注册
优点: 理解和使用方式简单, 属于傻瓜式操作, 使用相关工具按流程操作就行, 出错率低
缺点: 当需要更改类名...,包名或者方法时, 需要按照之前方法重新生成头文件, 灵活性不高
动态注册
优点: 灵活性高, 更改类名,包名或方法时, 只需对更改模块进行少量修改, 效率高
缺点: 对新手来说稍微有点难理解, 同时会由于搞错签名