Java部分
创建一个Java工程(JavaJNI),在工程内生成java与C++的通信接口(JavaJNITest)
代码内容
public class JavaJNITest {
public native void helloWorld();
}
进入工程文件夹内生成C++编译所需头文件
当前执行命令行为
- javac JavaJNITest.java 生成 JavaJNITest.class
- javah JavaJNITest 生成 JavaJNITest.h
C++部分
IDE为Microsoft Visual C++6.0 可自主选择
创建一个项目(CJNITest)
将生成的头文件(JavaJNITest.h)放入工程内
写入需要被Java调用的函数
代码内容
#include "JavaJNITest.h"
#include <iostream>
using namespace std;
JNIEXPORT void JNICALL Java_JavaJNITest_helloWorld(JNIEnv *env, jobject job){
cout << "Hello World!" << endl;
}
进行组建
编译过程可能会出现此错误:unexpected end of file while looking for precompiled header directive 解决办法如下图
组建后会在工程文件Debug文件中生成dll文件
Java调用JNI
代码内容
public class Test {
static {
//加载生成的dll
System.load("F:\\wwj\\CJNITest\\Debug\\CJNITest.dll");
}
public static void main(String[] args) {
JavaJNITest javaJNITest = new JavaJNITest();
javaJNITest.helloWorld();
}
}
效果输出
其他说明
Microsoft Visual C++6.0生成的dll为32位,需要用32位jdk调用,64位的jdk调用会报错
参考链接
https://blog.csdn.net/lwcloud/article/details/78326903
https://blog.csdn.net/weixin_34367845/article/details/87946501