最近开始用JNIWrapper来封装C++接口,以前接触过一些JNI的东西,感觉这些东西都异曲同工。比起来JNI来说我感觉JNIWrapper更加好用一些。
有了JNIWrapper,就可以不再创建本地类来调用开发系统API函数或者任意的动态库的函数,只需编写一些java语言代码,JNIWrapper完成剩下的工作。
JNIWrapper目前支持windows、linux、MAX os。下载windows版本的JNIWrapper之后会看到这样一个目录结构,
在bin目录中能够看到这样这样几个文件。
其中最重要的就是jniwrap.dll/jniwrap64.dll,jniwrap.lic,dll文件是jniwrapper的核心文件,而lic文件是jniwrapper的授权文件。
Docs目录是JNIWrapper的帮助文件夹。
Lib文件夹是jniwrapper使用所需要的jar包。这里如果是仅仅是调用的话,jniwrap-generator.jar可以不用导入项目中。
Samples文件夹是jniwarpper的实例文件夹,在里面可以看到jniwrapper的使用的一些demo。
WinPack文件夹存放着JNIWrapper的源代码,可以将这源代码导入到项目中便于调试。
了解了JNIWrapper目录结构之后来做一个简单的demo来看一下JNIWrapper的简单使用。
需要准备这样几步,第一步建立工程,建立一个dll文件夹,将jniwrap.dll、jniwrap.lic、jniwrap64.dll、JNIWrapper64SampleDLL.dll、JNIWrapperSampleDLL.dll。
第二步需要将dll文件夹配置到环境变量中,如果是在Eclipse打开之后再配置的环境变量的时候,这时候需要重新启动Eclipse,才能加载刚刚配置的环境变量。
第三部需要将native文件夹拷贝到项目src的同级目录下。
第四部将jar包导入classpath中。
到此为止所有的工作都准备好了,可以建立类文件了,并且输入下面的代码,执行一下就可以看到会输出110的。
package com.test.jniwrapper;
import com.jniwrapper.Function;
import com.jniwrapper.Int;
import com.jniwrapper.Library;
import com.jniwrapper.Parameter;
public class TestJNIWrapper {
private static Library SAMPLE_LIB=new Library("../dll/JNIWrapperSampleDLL.dll");
public static void returnValueSample(){
int a=10;
int b=100;
Function add=SAMPLE_LIB.getFunction("sumStdCall");
Int result=new Int();
add.invoke(result,new Int(a),new Int(b));
System.out.println("a+b="+result.getValue());
}
public static void main(String[] args) {
returnValueSample();
}
}
这个例子是一个比较简单的实例,比较深入的了解之后其实JNIWrapper就是这样简单的,仅仅需要编写java代码就可以了,另外需要注意的是授权问题,下载之后的jniwarpper试用期为30天。最后还有一个最大的问题就是一个表格,这个表格非常重要,可以说如果能够把表格的内容全都深入了解了,那么JNIWrapper也就用起来得心应手了。