Windows
Windows平台的JNI本地调用基本类似,区别就是制作的动态库不同,Linux平台是*.so
,Windows平台是*.dll
public class Hello {
public native static String sayHello(String name);
static {
System.load("D:\\ewp\\JNI_Test\\src\\libhello.dll");
}
public static void main(String[] args) {
Hello hello = new Hello();
String ret = hello.sayHello("kelvin");
System.out.println(ret);
}
}
cmd进入工作目录,生成编译文件Hello.class
和头文件Hello.h
javac -h . Hello.java
使用VS 2019创建动态链接库DLL
image.png
image.png
切换到项目视图
image.png
编写Native Method
#include "pch.h"
#include <iostream>
#include "Hello.h"
using namespace std;
JNIEXPORT jstring JNICALL Java_Hello_sayHello(JNIEnv* env, jclass jc, jstring name)
{
const char* buf = { 0 };
buf = env->GetStringUTFChars(name, NULL);
cout << buf << endl;
return env->NewStringUTF("hello");
}
添加头文件
把生成的本地头文件Hello.h
导入到工程中;另外,还需要把jni.h
和jni_md.h
这两个头文件也导入到工程中,修改Hello.h
Note:直接复制进来是无效的,需要右键头文件目录新建头文件,然后将内容导入
image.png
生成动态库
编译工程,生成动态链接库。如果是64
位系统,还需要设置Debug
为x64
,否则会报错。生成 ->配置管理器 or 直接工具栏Debug设置即可
image.png
调用动态库
切换到文件夹视图,把工程的根目录下Debug
中的libHello.dll
拷贝到Hello.class
目录,如果是x64
则是在目录x64
目录的Debug
目录下;然后,调用Hello
测试jni
的本地调用
java Hello
kelvin
hello