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

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

 

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

 

转载于:https://www.cnblogs.com/u0mo5/p/4049647.html

你可能感兴趣的文章
[Web Tools] 实用的Web开发工具
查看>>
ContentProvider
查看>>
欢迎来到Attention的博客
查看>>
获取IOS bundle中的文件
查看>>
document
查看>>
Hadoop下大矩阵乘法Version2
查看>>
iPhone内存溢出——黑白苹果
查看>>
Struts2学习笔记(十二) 类型转换(Type Conversion)(下)
查看>>
tcpdump学习
查看>>
局域网内传输文件速度慢
查看>>
Linux的核心版本(摘抄)
查看>>
CASE表达式
查看>>
后缀自动机
查看>>
zkw线段树
查看>>
asp.net中导出Excel的方法
查看>>
[转]跟紧时代,让你的设计更加popular
查看>>
作业1226
查看>>
mainline.js主线
查看>>
fseek()
查看>>
Python学习笔记——PyQt控件中文字居中显示
查看>>