Java 使用JNI调用dll文件
开发环境:Eclipse+Visual Studio 2017+windows 7

第一步:

首先在eclipse上新建一个项目,如下图:

java生成名字头像 java生成jni头文件_Java

然后,在测试类里写一个native关键字声明的方法,如下图:

java生成名字头像 java生成jni头文件_重启_02

第二步:

找到你的测试类生成的.class文件, 使用jdk命令javah来生成头文件。

java生成名字头像 java生成jni头文件_java_03

在上图的目录下打开命令行窗口,执行javah命令,如下图所示:

java生成名字头像 java生成jni头文件_java_04

第三步:

使用visual studio 生成一个.dll文件(不管什么编译器,大概的步骤都是差不多的),选择文件  --->新建 ---> 项目 ,如下图所示:

java生成名字头像 java生成jni头文件_头文件_05

java生成名字头像 java生成jni头文件_java_06

然后给Java代码生成的.h文件以及其他的两个.h文件放到工程目录下,见下图:

java生成名字头像 java生成jni头文件_Java_07

然后右键头文件,选择添加 --> 现有项,将刚才拷贝的三个文件添加到工程的头文件中,如下图所示:

java生成名字头像 java生成jni头文件_java生成名字头像_08

java生成名字头像 java生成jni头文件_java生成名字头像_09

添加完成后,双击打开Java代码生成的.h文件,你会发现报错了,如下图所示:

java生成名字头像 java生成jni头文件_Java_10


改完后,如下图:

java生成名字头像 java生成jni头文件_Java_11

打开.cpp文件,根据Java生成的头文件 写上“Hello world” 如下所示:

java生成名字头像 java生成jni头文件_头文件_12

java生成名字头像 java生成jni头文件_头文件_13

#include "stdafx.h"     
#include <iostream>
#include "com_jni_test_JNITest.h"
using namespace std;

JNIEXPORT void JNICALL Java_com_jni_test_JNITest_sayHello(JNIEnv *, jclass){

    cout << "Hello , world" << endl;
}
然后就可以生成dll文件了,选择生成 -->生成解决方案,见下图:

java生成名字头像 java生成jni头文件_java_14

找到生成的dll文件所在位置,复制路径,配置环境变量,如下图所示:

java生成名字头像 java生成jni头文件_重启_15

右键计算机 (我的电脑) -->属性-->高级系统设置 -->高级-->环境变量  -->点击系统变量里的Path -->编辑  ,如下图所示:

java生成名字头像 java生成jni头文件_重启_16

好了,回到Eclipse,写个测试代码测试一下:

java生成名字头像 java生成jni头文件_Java_17

报错了,Eclipse需要重启一下使环境变量生效,重启后继续测试,结果如下图:

java生成名字头像 java生成jni头文件_头文件_18

又报错了,这是因为我的系统是64位的,如果你的电脑是32位的就不会报这个错误,回到VS改下配置重新生成dll文件,如下图所示:

java生成名字头像 java生成jni头文件_头文件_19

重新生成dll文件,记得重新配置一下环境变量,然后重启Eclipse,继续测试,结果见下图:

java生成名字头像 java生成jni头文件_头文件_20

至此,成功调用dll文件。