学习JNA,Jnative个人总结

转载文章:http://landmine.iteye.com/blog/1560172

原文有相关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);
	}
}

你可能感兴趣的:(JNA,jnative)