zoukankan      html  css  js  c++  java
  • 学习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

    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);
    }
    }

  • 相关阅读:
    python 的基础 学习 第六天 基础数据类型的操作方法 字典
    python 的基础 学习 第五天 基础数据类型的操作方法
    python 的基础 学习 第四天 基础数据类型
    ASP.NET MVC 入门8、ModelState与数据验证
    ASP.NET MVC 入门7、Hellper与数据的提交与绑定
    ASP.NET MVC 入门6、TempData
    ASP.NET MVC 入门5、View与ViewData
    ASP.NET MVC 入门4、Controller与Action
    ASP.NET MVC 入门3、Routing
    ASP.NET MVC 入门2、项目的目录结构与核心的DLL
  • 原文地址:https://www.cnblogs.com/u0mo5/p/4049647.html
Copyright © 2011-2022 走看看