手上一个项目需要通过usb口去读取usbkey的信息,厂家提供的只有C/C++的接口,而主应用是java的,所以需要使用java去调用动态链接库,所以花了点时间研究了下JNI技术,jdk对JNI技术封装得很到位,使用起来非常简单,JNI技术最关键还是在于jni数据类型和本地数据类型的转换。先简单罗列下JNI的创建过程:
首先需要写一个java类,然后定义需要使用C/C++去实现的方法(虽然说jni是java native interface,但是目前只支持c/c++实现),使用native关键字声明。这里写一个简单的例子:
TestJNI.java
然后将以上文件使用javac编译,然后使用javah命令,如下:
javac test/jni/TestJNI.java
javah test.jni.TestJNI
之后会得到一个test_jni_TestJNI.h的头文件,内容如下:
test_jni_TestJNI.h
然后编写c/c++实现,如下:
TestJNI.c
使用VC编译成TestJNI.dll,编译是需要引入jre/include文件夹和jre/include/win32文件夹。
将TestJNI.dll拷贝至刚才test.jni.TestJNI的classpath下面,然后运行java test.jni.TestJNI就能得到输出了,一些在编写C程序时遇到的问题都在c代码中注释了,希望能给遇到同样问题的朋友一个借鉴。