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

学习JNA,Jnative的更多相关文章

  1. Atitit.java jna  调用c  c++ dll的原理与实践  总结  v2  q27

    Atitit.java jna  调用c  c++ dll的原理与实践  总结  v2  q27 1. Jna简单介绍1 2. Jna范例halo owrld1 3. Jna概念2 3.1. (1)需 ...

  2. Atitit.java jna 调用c++ dll 的总结

    Atitit.java jna 调用c++ dll 的总结 1. JNA技术解密1 1.1. JNA工作原理1 2. JNA技术难点 Java—C和操作系统数据类型的对应表1 2.1. 1 2.2.  ...

  3. 使用jna调用dll,jdk位数和dll位数的关系

    最近在学习jna,发现dll文件能能否成功调用取决于jdk位数. 32位jdk只能使用32位的dll,64位jdk只能使用64位的dll,否则位数不对应的话报的错是 "Exception i ...

  4. Java:准备学习的高级主题

    ClassLoader GC Concurrent Transaction JTA JPA JDBC JNDI JNI JNA JNative OSGI JMS JSTL EL Servlet NIO ...

  5. jnative 使用

    下载地址: JNative_1.4RC2_src.zip : http://jaist.dl.sourceforge.net/sourceforge/jnative/JNative_1.4RC2_sr ...

  6. java使用JNA框架调用dll动态库

    这两天了解了一下java调用dll动态库的方法,总的有三种:JNI.JNA.JNative.其中JNA调用DLL是最方便的. ·JNI ·JNA ·JNative java使用 JNI来调用dll动态 ...

  7. 使用JNA,让java调用原生代码

    JNA定义: JNA:java Native Access,是SUN公司开发的基于JNI的框架.JNI使得Java可以调用原生的c或者c++代码. JNA与JNI(Java Native Interf ...

  8. paip.java 调用c++ dll so总结

    paip.java 调用c++ dll so总结 ///////JNA (这个ms sun 的) 我目前正做着一个相关的项目,说白了JNA就是JNI的替代品,以前用JNI需要编译一层中间库,现在JNA ...

  9. Java调用DLL有多种方式,常用的方式有JNative、JNA、JNI等。

    JNative方式调用dll JNative是一种能够使Java语言使调用DLL的一种技术,对JNI进行了封装,可能有些读者会有这样一个问题,JNative对JNI进行了封装,并且是一种跨语言的使用D ...

随机推荐

  1. 【转】Docker网络模式--默认模式bridge模式

    一 引言 当 Docker 启动时,会自动在主机上创建一个名为 docker0 虚拟网桥,这实际上就是 Linux 的一个 bridge,可以理解为一个软件交换机.它会在挂载到它的网口之间进行转发.系 ...

  2. java redis 实现用户签到功能(很普通简单的签到功能)

    业务需求是用户每天只能签到一次,而且签到后用户增加积分,所以把用户每次签到时放到redis 缓存里面,然后每天凌晨时再清除缓存,大概简单思想是这样的 直接看代码吧如下 @Transactional @ ...

  3. UIDocumentPickerViewController和UIDocumentInteractionController

    UIDocumentPickerViewController和UIDocumentInteractionController UIDocumentPickerViewController 补充一下,U ...

  4. centos7下安装pcre库(pcretest)

    在linux下需要对正则表达式的验证,使用的验证工具是pcretest,这个工具集成在pcre库中,下面是安装教程. 安装环境是centos7. 1)首先去官网下载压缩包文件. 其他的source网站 ...

  5. 吴裕雄 python 神经网络——TensorFlow 花瓣分类与迁移学习(3)

    import glob import os.path import numpy as np import tensorflow as tf from tensorflow.python.platfor ...

  6. 【SSM sql.xml】日志查询mapper.xml

    LogInfoMapper.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapp ...

  7. 【PAT甲级】1068 Find More Coins (30 分)(背包/DP)

    题意: 输入两个正整数N和M(N<=10000,M<=10000),接着输入N个正整数.输出最小的序列满足序列和为M. AAAAAccepted code: #define HAVE_ST ...

  8. ajax发送GET和POST请求

    1.ajax-get请求demo <script> document.getElementById("buttonname").onclik=function(){ / ...

  9. Pipenv & 虚拟环境

    本教程将引导您完成安装和使用 Python 包. 它将向您展示如何安装和使用必要的工具,并就最佳做法做出强烈推荐.请记住, Python 用于许多不同的目的.准确地说,您希望如何管理依赖项可能会根据 ...

  10. HD Tune检查硬盘各参数的含义

    01 =Read Error Rate / (底层)数据读取错误率指从磁盘表面读取数据时发生的硬件读取错误的比率,Raw值对于不同的厂商有着不同的体系,单纯看做1个十进制数字是没有任何意义的.以上为W ...