首先我的参考博客如下:
https://www.cnblogs.com/CLAYJJ/p/7725975.html
https://www.cnblogs.com/xiaocainiao2hao/p/5619862.html
https://www.cnblogs.com/langtianya/p/3470896.html
流程如下:
1.建立一个java文件,在这里我只写了一个方法,myadd()。
package com.imgMatch;//包名影响着javah的使用
public class ForDll
{
static
{
System.loadLibrary("javaCallcpp");//javaCallcpp就是要加载的dll的名字,这是相对路径加载方式
}
public native int myadd(int a , int b);//myadd就是要在dll中实现的方法
public static void main(String args[])
{
ForDll test = new ForDll();
System.out.println(test.myadd(5, 6));
}
}
2.1 命令行里面 javac ForDll.java 生成ForDll.class
2.2 继续,javah 生成.h,这是给C++用的。
注意,命令应该是
javah -classpath . -jni com.xx.xx
3.打开VS2015,建立一个win32控制台程序,这里选dll
4.1 将ForDll.h加入头文件之中
4.2 新建dllApi.h,内容如下:
#include "ForDll.h"
int myadd(int a, int b);
4.3 新建dllApi.cpp,实现上面的函数,内容如下:
#include "stdafx.h"
#include <iostream>
#include "dllApi.h"
int myadd(int a, int b)
{
return (a + b);
}
4.4 写TestJNI.cpp,内容如下:
// TestJNI.cpp : 定义 DLL 应用程序的导出函数。
//
#include "stdafx.h"
#include "dllApi.h"
#include "ForDll.h"
JNIEXPORT jint JNICALL Java_ForDll_myadd(JNIEnv *env, jobject obj, jint a, jint b) {
return a+b;
}
5.在ForDll.h中有问题:
#include <jni.h>
会报错,找不到该文件。参考上述的几篇文章,我将 jni.h,jawt_md.h,jni_md.h放在了头文件里和VC\include里面,重启VS就好了。
6.生成dll文件
在这里生成,结果在项目的Debug文件里面。如TestJNI\x64\Debug\TestJNI.dll。
要注意的是,如果你的java用的是64位的话,就要去生成64位的dll,不然java那边会报错。
7. 在java项目里面添加dll
选中该项目,右键属性,在java build path里面的Libraries里面,打开JRE System Lib,里面的Native lib location,选择你放dll的文件夹即可
8.运行结果如下: