使用Java调用native方法
1.编写普通Java类
public class HelloNative {
public native void hello();
static {
System
.loadLibrary("Dll1");
}
public static void main(String
[] args
) {
new HelloNative().hello();
}
}
2.编译Java文件
javac HelloNative
.java
3.生成对应头文件
javah -jni HelloNative.class
#include "jni.h"
#ifndef _Included_HelloNative
#define _Included_HelloNative
#ifdef __cplusplus
extern "C" {
#endif
JNIEXPORT
void JNICALL Java_HelloNative_hello
(JNIEnv
*, jobject
);
#ifdef __cplusplus
}
#endif
#endif
4.用vs新建C++动态链接库项目
我使用的是VS2019,需要把需要的头文件引入项目,引入头文件时需要右键打开项目所在文件位置粘贴过去,而且还需要在项目中再复制一遍所需的头文件到项目的头文件目录下。别问我,我也不知道为啥。。貌似VS这个库依赖可以配置,具体可以百度。
头文件jni jni_md 和jawt_md在jdk所在目录的include文件夹内
我电脑上的jdk路径是:C:\Program Files\Java\jdk1.8.0_202\include
5.在dllmain.app内写实现方法
#include "pch.h"
#include "jni.h"
#include "HelloNative.h"
#include <stdio.h>
JNIEXPORT
void JNICALL
Java_HelloNative_hello(JNIEnv
* env
, jobject obj
) {
printf("hello native!");
}
6.右键生成
如果使用的jdk为64位的,需要在 生成->配置管理器->平台 设置为x64位
将生成的dll文件放在jvm能扫描到的地方Java HelloNative就行了。PS:放到项目路径下也行
7.查看jvm能扫描到的library路径
String property
= System
.getProperty("java.library.path");
String
[] split
= property
.split(";");
for (String item
: split
) {
System
.out
.println(item
);
}