Java在使用jni时sun公司提供的有jna包,一般会在jdk中直接引入包,如果找不到,在网上下载一个jna的包引入就行,在使用jna时主要的注意事项是数据类型传递的问题
对于引入dll库时的数据类型,如C/C++中的参数类型如下
ULONG WINAPI Test(WCHAR input, char strin, int nput, WCHAR wstrout, char *strout, int nout);
其中前三个参数是入参,也就是Java传递给C/C++中的参数,后三个是在Java层分配空间后接收C/C++层传出的参数,在Java层定义如下
1.创建接口加载.ll库
import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.WString;
import com.sun.jna.ptr.IntByReference;
public interface JnaTestLib extends Library {
JnaTestLib INSTANCE = (JnaTestLib) Native.loadLibrary("jnitest",
JnaTestLib.class);
public int Test(WString input, byte[] ch, int i, char[] out,
IntByReference nlen);
public int TestInt(int input);
public IntByReference Add(IntByReference nlen);
}
在调用时:
WString input = new WString(“中文”);
String ch = "在不";
int i = 5;
char[]out = new char[20];
byte[]out2 = new byte[128];
IntByReference nlen = new IntByReference();
IntByReference nlen2 = new IntByReference();
JnaTestLib.INSTANCE.Test(input, ch.getBytes(), i, out, nlen);
IntByReference r2 = JnaTestLib.INSTANCE.Add(nlen2);