Java中使用JNI调用C++

1,JNI是什么?

JNI即Java Native Interface(Java本地接口),是一个协议,主要作用为:实现Java调用c/c++代码(类库),或者C/C++调用Java代码

2,主要实现如下:

2.1, 首先在本地任意的一个目录下创建2各类JNI.java 和Test.java,我在D:\JNITest目录下创建了这两个文件

//JNI.java文件
public class JNI{
   //创建一个native接口方法,此方法在C++代码中实现
   public native int call();
   //静态代码块,加载由C++代码生成的.dll动态链接文件(.dll相当于Java中的jar包吧...)
   static{
       System.loadLibrary("JNIdll");
   }
}
//Test.java文件
public class Test{
    public static void main(String[] args){
        //创建JNI的对象call
        JNI call = new JNI();
        //调用call()方法;
        int i = call.call();
        //输出调用后的结果i
        System.out.println("调用Java Native Interface,返回:"+i);
    }
}

我的目录如下:


Java中使用JNI调用C++_第1张图片

2.2,使用javac 编译JNI.java生成字节码文件JNI.class(需要安装配置java环境变量)并使用javah 编译刚生成的字节码文件得到JNI.h文件,具体操作如下:

  • 在JNI.java源文件目录下打开命令框(cmd),可以cd切换到该目录也可以通过下面的方法直接打开该目录:
Java中使用JNI调用C++_第2张图片
  • javac编译
  • javah 编译刚才的JNI.calss字节码文件,注意不要后缀名
Java中使用JNI调用C++_第3张图片
  • 用Notepad++打开JNI.h文件看看:
Java中使用JNI调用C++_第4张图片

2.3 编写C++代码(JNIdll.cpp文件)来实现JNI.java中的call()方法(native修饰的)

//JNIdll.cpp文件

#include
#include
#include "JNI.h"

JNIEXPORT jint JNICALL Java_JNI_call
  (JNIEnv *, jobject){
      //实现代码
      int i = 777;
      return i;
}

2.4 使用C++编译器生成.dll动态链接文件

  • 首先需要有C++的编译器,因为我的电脑上装了VS2013,所以有C++的编译器,需要使用 cl 命令,所以先将cl的目录路劲设置到系统的path环境变量中,不然系统不识别此命令(提示cl不是内部或者外部命令),目录路径如下:
Java中使用JNI调用C++_第5张图片
  • 需要将java目录下的include目录下的两个文件jni.h和jni_md.h(jni_md.h在include目录下的win32目录中)拷贝到vc的include目录下
Java中使用JNI调用C++_第6张图片

2.5 打开命令行,看图不说话...

Java中使用JNI调用C++_第7张图片

你可能感兴趣的:(Java中使用JNI调用C++)