首先说下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. JavaScript ES5类 原型 原型链 组合、原型、寄生式继承

    ES5类 原型  原型链 继承 JavaScript中,原型是相对于构造函数(类)的叫法(或者说概念),原型链是相对于构造函数(类)的实例对象的叫法. 对于JavaScript对象,如果在对象自身上找 ...

  2. ztree-编辑节点(树节点添加,删除,修改)

    <!DOCTYPE html> <HTML> <HEAD> <TITLE> ZTREE DEMO - addNodes / editName / rem ...

  3. oracle 多表查询,请教个问题

    首先,是有一个合同表,对应数据库表 lg_bill_of_lading_detail  简称 bold    有一个用户表 EMT_USER 简称 e 合同审批 后,合同表里  会有一个审核人AUDI ...

  4. git 工具常见命令

    1.git是什么 git是分布式版本管理工具,一台电脑既可以是客户端,也可以是服务端.工作过程中可以断开网络. git中的三个概念: 1.版本库:在初始化git版本库之后会生成一个隐藏的文件, .gi ...

  5. 获取 python linux Home目录

    #! /usr/bin/python # -*- coding: utf-8 -*- import os print os.environ['HOME'] print os.path.expandva ...

  6. AgileReview 代码检视工具使用

    AgileReview 它是一个eclipse插件. http://www.agilereview.org/ 官网地址. 四种下载插件方式. 1.Marketplace QuickInstall    ...

  7. 忘记linux下的mysql密码,需要重新创建密码123456

    你必须要有操作系统的root权限了. # mysqld_safe --skip-grant-tables & &,表示在后台运行,不再后台运行的话,就再打开一个终端咯. # mysql ...

  8. 开关电源ac-dc推荐电路

    在使用AC-DC电源模块SA系列时,如果碰到对模块的输出纹波噪声要求较高或对EMC要求严格的场合,应对模块进行必要的滤波处理使到满足不同环境的特殊要求,以下推荐一滤波电路供参考: 图中各元件的说明:1 ...

  9. ElasticSearch学习记录 - 命令示例

    GET /searchfilmcomments/searchfilmcomments/_search { "query": { "match_all": {} ...

  10. day 12 zuoye

    复习 # 函数 -- 2天 # 函数的定义和调用 # def 函数名(形参): #函数体 #return 返回值 #调用 函数名(实参) # 站在形参的角度上 : 位置参数,*args,默认参数(陷阱 ...