我们都知道Java是不能直接调用操作系统的硬件驱动的,而C语言是可以的。所以我们设想着通过Java调用C语言的函数来实现对硬件驱动的操作。
简单的配置如下:
下载visual studio2015。(由于VC是不支持生成64位dll文件的,所以只能用visual studio2015来生成)。
Java的配置还是比较简单的。将Java目录下H:\Program Files (x86)\Java\jdk1.8.0_92\include中的jni.h以及H:\Program Files (x86)\Java\jdk1.8.0_92\include\win32中的jawt_md.h和jni_md.h复制到Microsoft Visual Studio 14.0\VC\include目录下
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uvmqgpSP-1614134130952)(https://img-blog.csdn.net/20160801213347040)]
我们打开eclipse编写以下代码:
public class MainClass {
static {
System.loadLibrary("JNI_HelloWorld");
}
private native void display();
public static void main(String[] args) {
new MainClass().display();
}
}
声明了本地方法display();也就是说Java声明了该方法,C、C++语言去实现该方法。
我们用javah命令行用于生成C语言头文件。javah命令用于.class文件,也就是说我们得先编译.java文件
javac MainClass.java // MainClass.java是我们刚编写的代码
javah MainClass // MainClass是.class的文件名
运行完后,会生成MainClass.h文件。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-D17AxFVP-1614134130955)(https://img-blog.csdn.net/20160801214011390)]
我们在visual studio新建JNI_HelloWorld工程
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0uYIKh7K-1614134130958)(https://img-blog.csdn.net/20160801213639792)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7hHY2vAO-1614134130959)(https://img-blog.csdn.net/20160801213709043)]
由于visual studio生成64位dll文件是需要配置的(默认生成32位)
做如下设置:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-w0YsZGIy-1614134130960)(https://img-blog.csdn.net/20160801214228293)]
右键项目,选择属性。修改如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mBFWnNHg-1614134130962)(https://img-blog.csdn.net/20160801214310583)]
这样生成的dll就是64位的了。
我们点击运行项目,就会发现,在项目中会生成x64文件夹
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iMXzOlUp-1614134130963)(https://img-blog.csdn.net/20160801214433263)]
我们打开工程目录下的JNI_HelloWorld文件夹。将MainClass.h复制到该目录下。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9vnTABsq-1614134130964)(https://img-blog.csdn.net/20160801214542446)]
然后在visual studio新建cpp文件。文件名就随意取了。
编写如下代码:
#include <jni.h>
#include "MainClass.h"
#include <iostream>
using namespace std;
JNIEXPORT void JNICALL Java_MainClass_display
(JNIEnv *, jobject) {
cout << "HelloWorld\n";
return;
}
我们点击运行。就会生成dll文件了。该文件在x64/Debug文件夹下。
我们将该文件复制到eclipse中,再次运行代码。就会输出HelloWorld了。如果出现
Exception in thread "main" java.lang.UnsatisfiedLinkError: no JNI_HelloWorld in java.library.path
问题,可以核对一下路径。