博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JNI开发极简教程
阅读量:7072 次
发布时间:2019-06-28

本文共 2793 字,大约阅读时间需要 9 分钟。

JNI(Java Native Interface)

Java调用C/C++,C/C++调用Java的一套API

前言:

学习JNI需要C/C++的相关知识,而且需要研究JNI手册.

想学习的同学,请follow我的学习笔记

1:在eclipse中编写native方法

public class Java2cpp {        static {     System.loadLibrary("Project4");    }     public native int DLL_ADD(int a,int b);//加public native int DLL_SUB(int a,int b);//减public native int DLL_MUL(int a,int b);//乘public native int DLL_DIV(int a,int b);//除    public static void main(String args[]){            int sum = 0;        Java2cpp test = new Java2cpp();    sum = test.DLL_ADD(2, 4);    System.out.println("Java call cpp dll result:" + sum);      }        }}

2.javah命令,生成.h头文件

  • 第一步:javac Java2cpp.java  生成java2cpp.class

  • 第二步:javah Java2cpp  生成Java2cpp.h头文件,内容如下:

    img_c9e9a4e079ebf10898d7a5733bb091f2.jpe
    cmd操作
//生成的C++头文件Java2cpp.h/* DO NOT EDIT THIS FILE - it is machine generated */#include "jni.h"/* Header for class Java2cpp */#ifndef _Included_Java2cpp#define _Included_Java2cpp#ifdef __cplusplusextern "C" {#endif/* * Class:     Java2cpp * Method:    DLL_ADD * Signature: (II)I */JNIEXPORT jint JNICALL Java_Java2cpp_DLL_1ADD  (JNIEnv *, jobject, jint, jint);/* * Class:     Java2cpp * Method:    DLL_SUB * Signature: (II)I */JNIEXPORT jint JNICALL Java_Java2cpp_DLL_1SUB  (JNIEnv *, jobject, jint, jint);/* * Class:     Java2cpp * Method:    DLL_MUL * Signature: (II)I */JNIEXPORT jint JNICALL Java_Java2cpp_DLL_1MUL  (JNIEnv *, jobject, jint, jint);/* * Class:     Java2cpp * Method:    DLL_DIV * Signature: (II)I */JNIEXPORT jint JNICALL Java_Java2cpp_DLL_1DIV  (JNIEnv *, jobject, jint, jint);#ifdef __cplusplus}#endif#endif

3.复制.h头文件,jni.h和jni_md.h到CPP工程中

  • 用visual studio新建空C++项目,引入头文件Java2cpp.h,这边因为没有jni.h和jni_md.h,我们也要导入(jni.h和jni_md.h在jdk的lib中),

    img_5fcd5ace4496bd501e3e77886dc98a44.jpe
    项目结构

4.实现.h头文件中声明的函数

编写头文件Java2cpp.h的实现即testdll.cpp.部分代码如下.

#include "Java2cpp.h"/** Class:     Java2cpp* Method:    DLL_ADD* Signature: (II)I*/JNIEXPORT jint JNICALL Java_Java2cpp_DLL_1ADD(JNIEnv *env, jobject obj, jint a, jint b){    int var = 0;    var = a + b;    return var;}/** Class:     Java2cpp* Method:    DLL_SUB* Signature: (II)I*/JNIEXPORT jint JNICALL Java_Java2cpp_DLL_1SUB(JNIEnv *env, jobject obj, jint a, jint b){    int var = 0;    var = a-b;    return var;}

5.生成dll文件

  • 配置文件,右键上3图项目结构选择属性

    img_12be7bf8595697922ad3641c145647c6.jpe
    这里写图片描述

  • 生成解决方案即可

6.配置dll文件所在目录到环境变量

将dll文件所在目录配置到Path中,例如我把dll放在 D:\DllTools ,

则需要将 D:\DllTools; 添加到path的最前面.

7.重启Eclipse

重启查看结果

public class Java2cpp {        static {     System.loadLibrary("Project4");    }     public native int DLL_ADD(int a,int b);//加public native int DLL_SUB(int a,int b);//减public native int DLL_MUL(int a,int b);//乘public native int DLL_DIV(int a,int b);//除    public static void main(String args[]){            int sum = 0;        Java2cpp test = new Java2cpp();    sum = test.DLL_ADD(2, 4);    System.out.println("Java call cpp dll result:" + sum);      }    }
//console 显示的结果Java call cpp dll result:6

转载地址:http://bbell.baihongyu.com/

你可能感兴趣的文章
不允许使用抽象类类型
查看>>
Android利用方向传感器获得手机的相对角度实例说明
查看>>
从头认识java-13.9 隐式和显示的创建类型实例
查看>>
git笔记之安装使用
查看>>
jquery中的动画
查看>>
用python将MSCOCO和Caltech行人检测数据集转化成VOC格式
查看>>
Java过滤器处理Ajax请求,Java拦截器处理Ajax请求,java 判断请求是不是ajax请求
查看>>
centos/linux下的安装Tomcat
查看>>
ieda 运行web--导入其它jar包
查看>>
[ios]关于ios开发图片尺寸的建议
查看>>
C# IEnumerator的使用
查看>>
Windows获取远程Linux局域网内的mysql连接
查看>>
android BSP与硬件相关子系统读书笔记(1)android BSP移植综述
查看>>
微信中通过页面(H5)直接打开本地app的解决方案
查看>>
在 Win 7或8 下使用 VirtualBOX 虚拟机安装 OS X 10.11 El Capitan 及 Xcode 7.0
查看>>
iOS -- SKPhysicsJointSpring类
查看>>
第三百九十五节,Django+Xadmin打造上线标准的在线教育平台—Xadmin集成富文本框...
查看>>
vim打造开发IDE
查看>>
【Linux】利用Xvfb关闭chrome的图形化输出
查看>>
error: pcap library not found! 解决方法
查看>>