本文主要是介绍JNI,JNA,Jnative,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
首先说下JAVA调用DLL,Java调用DLL的常用方法大致为几种,JNI,JNA,Jnative等,但实现与易用性差距还是很大,1.JNI用的人比较多,但相对来说比较麻烦要熟悉c并且要使用javac 及javah命令,步骤繁琐2.JNA,Jnative相对简单只需要用实现接口,使用相对简单,但无论使用什么调用dll文件,比较令人头疼的都是JAVA与C之间类型对应与值对应。下面我将项目中对着JNA及jnative的使用总结下。
1.JNA样码
步骤如下:
a,下载JNAjar文件,拷贝至系统根目录或者系统system32下
b,代码很easy
- package com.cn.app;
- import com.sun.jna.Library;
- import com.sun.jna.Native;
- public class DLLTEST {
- // 1.实现PegRoute.dll 文件接口
- public interface PegRoute extends Library {
- // 2.PegRoute.dll 中 HCTInitEx方法
- public int HCTInitEx(int Version, String pStrCurrentDirectory);
- }
- public static void main(String[] args) {
- //3.加载DLL文件,执行dll方法
- PegRoute epen = (PegRoute) Native.loadLibrary("PegRoute",
- PegRoute.class);
- if (epen != null) {
- System.out.println("DLL加载成功!");
- int success = epen.HCTInitEx(0,"");
- System.out.println("1.设备初始化信息!" + success);
- }
- }
- }
2.Jnative样码
1.下载jnative。jar 及JNativeCpp.dll
2.将使用的dll文件及JNativeCpp.dll拷贝至系统system32下
3.样码
- import org.xvolks.jnative.JNative;
- import org.xvolks.jnative.exceptions.NativeException;
- import org.xvolks.jnative.Type;
- import org.xvolks.jnative.misc.basicStructures.LONG;
- public class JNativeT {
- static JNative PegRoute = null;
- public String init() throws NativeException, IllegalAccessException {
- try {
- if (PegRoute == null) {
- // 1. 利用org.xvolks.jnative.JNative来加载DLL:参数1.PegRoute为类名
- // 2.HCTInitEx方法名
- PegRoute = new JNative("PegRoute", "HCTInitEx");
- // 2.设置要调用方法中的参数:0 表示第一个以此类推
- LONG versionLong = new LONG(10);
- versionLong.setValue(0);
- PegRoute.setParameter(0, Type.LONG, versionLong.toString());
- PegRoute.setParameter(1, Type.STRING, "");
- // 3.设置返回参数的类型
- PegRoute.setRetVal(Type.INT);
- // 4.执行方法
- PegRoute.invoke();// 调用方法
- }
- System.out.println("调用的DLL文件名为:" + PegRoute.getDLLName());
- System.out.println("调用的方法名为:" + PegRoute.getFunctionName());
- // 5.返回值
- return PegRoute.getRetVal();
- } finally {
- if (PegRoute != null) {
- // 6.释放系统资源
- PegRoute.dispose();
- }
- }
- }
- public static void main(String[] args) throws NativeException,
- IllegalAccessException {
- String mm = new JNativeT().init();
- System.out.println(mm);
- }
- }
要使用的相关jar文件都在下方。
这篇关于JNI,JNA,Jnative的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!