1 E:\workspace\目录下新建文件夹jniTest,新建java文件Test.java
编写Test类:
public class Test {
static {
// System.loadLibrary("JNICPPDEMO");
System.load("c:\\Users\\86158\\source\\repos\\Dll1\\x64\\Debug\\DLL1.dll");
}
public static void main(String a[]){
Test t = new Test();
t.doPrint("xiao an lu !");
t.doPrint(t.add(9,6)+"");
}
public native String doPrint(String name);
public native int add(int a,int b);
}
2 、打开dos命令窗口 命令: javac Test.java 编译生成Test.class, javah Test 生成Test.h头文件
3、这里咱们用visual studio 2017创建dll
一、打开visual studio 2017 文件--》新建--》项目--》windos 桌面--》具有导出项的(DLL)动态链接库--》确定
二、项目--》Dll1属性--》配置属性--》VC++目录--》包含目录 (注意:根据系统切换平台到X64)
在包含目录中添加Test.h的目录,
以及本地jdk安装目录下的两个目录:
C:\Program Files\Java\jdk1.8.0_231\include\win32
C:\Program Files\Java\jdk1.8.0_231\include
三、 新建Test.cpp 编写代码,其中Java_Test_doPrint方法名就对应Test.h里面的方法
#include "jni.h"
#include "pch.h"
#include "string.h"
#include "Test.h"
JNIEXPORT jstring JNICALL Java_Test_doPrint
(JNIEnv * env, jobject o, jstring str) {
const char *c_str = NULL;
c_str = env->GetStringUTFChars(str, false);
printf(c_str);
return str;
}
JNIEXPORT jint JNICALL Java_Test_add
(JNIEnv * env, jobject o, jint a, jint b) {
return a + b;
}
保存后,生成--》生成解决方案 在最下面可见生成成功DLL1.dll文件 其路径:
注:Test.java 中static块中加载的dll路径System.load("c:\\Users\\86158\\source\\repos\\Dll1\\x64\\Debug\\DLL1.dll");
整个过程就已经完成,java Test运行Test 类 输出结果可见 成功调用了c 语言方法