JNative相比jni简单很多,需要下载JNative.jar,JNativeCpp.dll(windows),libJNativeCpp.so(linux)
将目标dll和JNativeCpp.dll 复制到Windows\System32下
// 打开数据流句柄
public static long openDataStream(byte[] lpszDiskRoot) throws NativeException,
IllegalAccessException {
JNative PegRoute = null;
try {
if (PegRoute == null) {
// 1. 利用org.xvolks.jnative.JNative来加载DLL:参数1.PegRoute为类名
// 2.HCTInitEx方法名
PegRoute = new JNative("StreamData", "OpenDataStream");
// 2.设置要调用方法中的参数:0 表示第一个以此类推
Pointer a = new Pointer(
MemoryBlockFactory.createMemoryBlock(4 * 10));
a.setMemory(lpszDiskRoot);
PegRoute.setParameter(0, a);
// 3.设置返回参数的类型
PegRoute.setRetVal(Type.INT);
// 4.执行方法
PegRoute.invoke();// 调用方法
}
System.out.println("调用的DLL文件名为:" + PegRoute.getDLLName());
System.out.println("调用的方法名为:" + PegRoute.getFunctionName());
// 5.返回值
return Integer.parseInt(PegRoute.getRetVal());
} finally {
if (PegRoute != null) {
// 6.释放系统资源
PegRoute.dispose();
}
}
}