学习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);
}
}
学习JNA,Jnative的更多相关文章
- 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)需 ...
- 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. ...
- 使用jna调用dll,jdk位数和dll位数的关系
最近在学习jna,发现dll文件能能否成功调用取决于jdk位数. 32位jdk只能使用32位的dll,64位jdk只能使用64位的dll,否则位数不对应的话报的错是 "Exception i ...
- Java:准备学习的高级主题
ClassLoader GC Concurrent Transaction JTA JPA JDBC JNDI JNI JNA JNative OSGI JMS JSTL EL Servlet NIO ...
- jnative 使用
下载地址: JNative_1.4RC2_src.zip : http://jaist.dl.sourceforge.net/sourceforge/jnative/JNative_1.4RC2_sr ...
- java使用JNA框架调用dll动态库
这两天了解了一下java调用dll动态库的方法,总的有三种:JNI.JNA.JNative.其中JNA调用DLL是最方便的. ·JNI ·JNA ·JNative java使用 JNI来调用dll动态 ...
- 使用JNA,让java调用原生代码
JNA定义: JNA:java Native Access,是SUN公司开发的基于JNI的框架.JNI使得Java可以调用原生的c或者c++代码. JNA与JNI(Java Native Interf ...
- paip.java 调用c++ dll so总结
paip.java 调用c++ dll so总结 ///////JNA (这个ms sun 的) 我目前正做着一个相关的项目,说白了JNA就是JNI的替代品,以前用JNI需要编译一层中间库,现在JNA ...
- Java调用DLL有多种方式,常用的方式有JNative、JNA、JNI等。
JNative方式调用dll JNative是一种能够使Java语言使调用DLL的一种技术,对JNI进行了封装,可能有些读者会有这样一个问题,JNative对JNI进行了封装,并且是一种跨语言的使用D ...
随机推荐
- netty(一)---服务端源码阅读
NIO Select 知识 select 示例代码 : //创建 channel 并设置为非阻塞 ServerSocketChannel serverChannel = ServerSocketCha ...
- MongoDB - 运行
运行 mongod --dbpath (mongod is the "Mongo Daemon") 在shell用mongo或者用studio 3t可视化连接 创建用户 db.cr ...
- WLC-WLC升级(以2504为例)
1.WLC升级需要按照升级路径来操作,低版本到高版本的跨度太大,往往需要升级到中间版本,有时候还涉及到FUS. 2.我们升级,一般使用的笔记本上运行的TFTP/FTP server. 需要注意:笔记 ...
- js一位大侠的笔记--转载
js基础 js笔记散记,只是为了方便自己以后可以回看用的: 1.所有用 “点” 的都能 “[]” 代替 odiv.style.color odiv['style'].color odiv['style ...
- ES6简单语法
ES6 简单语法: 变量声明 ES5 var 声明变量为全局变量 会变量提升 ES6 let 声明的变量为块级变量 且不能重复声明 不存在变量提升 # {}一个大括号为一个作用域 ES6 const ...
- 牛客跨年AK场-小sum的假期安排
链接:https://ac.nowcoder.com/acm/contest/3800/G来源:牛客网 题目描述 小 sun 非常喜欢放假,尤其是那种连在一起的长假,在放假的时候小 sun 会感到快乐 ...
- onclick="this.src=this.src+'?'"是什么意思?
onclick="this.src=this.src+'?'" 这是表示当前图片链接 在当前链接值的基础上添加了一个问号 譬如当前src="check.aspx" ...
- ES 创建mapping
mapping的写入与查看首先创建一个索引: curl -XPUT "http://erp2.es.kd1.pagoda.com.cn:80/erp_stock_index"{&q ...
- 「JSOI2010」挖宝藏
「JSOI2010」挖宝藏 传送门 由于题目中说道挖一个位置的前提是挖掉它上面的三个,以此类推可以发现,挖掉一个点就需要挖掉这个点往上的整个倒三角,那么也就会映射到 \(x\) 轴上的一段区间(可以发 ...
- Django继承drf的user模型的demo
1.安装虚拟环境 #mkvirtualenv drfdemo -p python3 #pip install django #pip install djangorestframework #pip ...