您的位置:首页 > 其它

JNI,JNA,Jnative

2016-07-20 17:43 465 查看


首先说下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 

Java代码  


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.样码 

Java代码  


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文件都在下方。

jna.jar (925.9 KB)
下载次数: 636
JNative.jar (416.3 KB)
下载次数: 519
JNative_V1.3.zip (362.7 KB)
下载次数: 722
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: