博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
学习JNA,Jnative个人总结
阅读量:6487 次
发布时间:2019-06-23

本文共 2179 字,大约阅读时间需要 7 分钟。

hot3.png

转载文章:

原文有相关jar包下载

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

转载于:https://my.oschina.net/fangshaowei/blog/158762

你可能感兴趣的文章
作用域、执行环境、作用域链
查看>>
聊聊jvm的-XX:MaxDirectMemorySize
查看>>
(十二)java springcloud b2b2c多用户商城系统-springboot集成apidoc
查看>>
吴恩达机器学习 Coursera 笔记(三) - 线性回归回顾
查看>>
新鲜出炉的电信诈骗经历
查看>>
SpringCloud源码:Ribbon负载均衡分析
查看>>
vue中axios请求的封装
查看>>
深入Java -JVM 垃圾回收
查看>>
web性能測試工具-沒還有實驗-URL收集_无需整理
查看>>
测试过程中的防忽悠沟通法
查看>>
第五章 文本编辑器 vi 命令-centos7.5知识
查看>>
我的友情链接
查看>>
小型车、中型车、大型车、重型车的区分和定义见下表:
查看>>
工作多年的.NET程序员,是否建立了自己的开发知识库?分享制作电子书的经验...
查看>>
网络端口号大全
查看>>
非常不错的sharepoint webpart工具集
查看>>
腾讯微博Android客户端开发——OAuth认证介绍
查看>>
UIView的属性使用
查看>>
关于linux内核模块的装载过程
查看>>
linux下gcc升级
查看>>