`
landmine
  • 浏览: 95177 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

学习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


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);
	}
}



要使用的相关jar文件都在下方。
  • jna.jar (925.9 KB)
  • 下载次数: 787
分享到:
评论
5 楼 12353374798 2017-08-25  
jnative调用比较简单,但是如何在实际项目中使用了。
比如说在B/S架构中,服务器上连接着很多终端,每个终端都用一台银行读卡器(DLL支撑),此时jnative怎么使用,能阐述一下不?
4 楼 PSD 2015-04-30  
楼主求教,JNative能不能调用User32.dll的setParent方法?如果不行,如何使用JNA实现FindWindow
SetParent
SetWindowPos三个方法的调用(三者缺一不可,且有联系,实现窗口置于桌面底层的功能)?
3 楼 asukaneo 2013-08-20  
这种代码的意义不大
特别是jnative
即使是官方给的所谓文档完全不能有所帮助
特别是针对结构体传值这一点
2 楼 zl_leizi 2013-04-26  
PegRoute.dll 是什么东东。
1 楼 liuguangchao 2013-04-07  
HAODONGXI

相关推荐

    jna和JNative

    总结起来,JNI和JNA都是Java与本地代码交互的重要工具。JNI适合对性能有严格要求且愿意投入更多时间在本地代码上的项目,而JNA则为开发者提供了便利,牺牲了一定的性能以换取开发效率。在实际应用中,应根据项目需求...

    jna和jnative访问.dll的一个示例

    jna和jnative的一个简单示例工程,包含jna和jnative的jar包,还有jna的chm api文档以供参考。其中.dll是的函数是求两个数的较大值。这是我初入学习java访问.dll做的一个示例。

    JNA.jar-JNative.jar-jinvoke.jar-dll创建-JAVA调用-VC调用

    相比于JNA,JNative提供了更底层的控制,但需要编写JNI代码,这通常涉及创建头文件、实现本地方法并进行编译。`TestJNative.java`很可能是使用JNative调用DLL的示例代码。 `jinvoke.jar`是另一个相关的库,它可能...

    JNI 框架jar 包_JNA_jacob_jwain_jnative

    JNI(Java Native Interface)框架是Java平台中用于与本地代码交互的一种机制,它允许Java程序调用C/C++等本地库的...通过这些库,Java开发者可以避免深入学习和使用JNI的复杂性,同时也能充分利用Java的跨平台优势。

    JNA.jar-JNative.jar-dll创建-JAVA调用-VC调用

    标题中的“JNA.jar-JNative.jar-dll创建-JAVA调用-VC调用”涉及到的是Java平台下通过JNI(Java Native Interface)的两种实现方式,JNA(Java Native Access)和JNative,来与C/C++编写的动态链接库(DLL)进行交互...

    jna4.4.0+jna-platform4.4.0+JNative.zip

    总的来说,"jna4.4.0+jna-platform4.4.0+JNative.zip"这个压缩包提供了一套完整的工具,让Java开发者能够方便、高效地利用操作系统API,实现底层功能的集成和扩展,而无需深入学习本机编程。通过熟练掌握JNA,Java...

    JNative综合学习资料

    JNative可以与其他Java库如Apache Commons、JNA(Java Native Access)等结合使用,以实现更复杂的功能。理解如何将JNative与其他工具结合,能进一步提升开发效率。 总之,“JNative学习资料”是学习和掌握Java与C/...

    YiKaTong.rar_JNative_YiKaTong.r_java jnative dll_jnative api_jna

    《JNative调用DLL进行开发详解》 在Java编程中,有时我们需要调用本地系统库(如DLL...通过对YiKaTong.rar中的示例进行学习,开发者可以深入理解JNative的工作原理,并将其应用于自己的项目中,解决跨语言调用的问题。

    JNative&jna-4.0.0.rar

    总结来说,JNative和JNA都是Java与本地代码交互的重要工具,它们为开发者提供了便利,使得在Java中调用本地资源变得更加简单。JNA 4.0.0的发布,进一步提升了这一过程的效率和可靠性,使得在跨平台项目中使用本地...

    JNative.jar以及JNative源码

    值得注意的是,JNative并不是唯一的选择,Java中还有其他库如JNA(Java Native Access)和JNR(Java Native Runtime)等,它们提供了不同的方式来调用本地代码。然而,JNative以其简洁的API和良好的性能,成为许多...

    利用JNative、jna暴力破解windows程序

    资源中,有源代码、以及相关依赖包,适合懂java的人去破解windows程序,样例代码给出了破解数字类密码的方法,感兴趣的同学可以在此基础上进行改造,做适合自己场景的破解逻辑,谢谢大家!

    Java调用Win32获取窗口句柄JNative-1.3.2

    3. **JNative**:可能是一个包含头文件和源代码的目录,供开发者查看和学习如何使用JNative库来调用Win32 API。 4. **libJNativeCpp.so**:这是针对Linux平台的动态链接库,表明JNative库也支持Linux环境,但具体...

    jna-4.5.0.jar

    但是这样很麻烦,而且双层封装不稳定,最后在网上看到有人用Jnative可以直接访问delphi的dll库,所以就转向Jnative,但是通过折腾里面还是从在了很多问题,最后通过JavaEye问答讨论,用JNA比用Jnative好用一点,所以最终...

    jnative.jar

    《深入理解Java调用DLL与Win API:JNative.jar解析》 在Java编程环境中,有时候我们需要调用操作系统底层的...对于希望深入了解Java本地接口和系统级编程的开发者来说,JNative.jar及其源代码是不可多得的学习资源。

    Java调用DLL的工具 JNative

    Java调用DLL的工具JNative是为了解决Java应用程序与本地动态链接库(DLL)交互问题而设计的一个开源组件。在传统的Java开发中,如果需要调用非Java编写的库,比如C或C++编译的DLL,通常会使用JNI(Java Native ...

    JNative_jar.zip

    总结一下,JNative框架结合了JNA的便利性和JNI的灵活性,为Java和Android开发者提供了一种简单易用的方式来调用本地动态库。这个压缩包中的三个文件覆盖了Windows和Linux/Android平台,使得跨平台的本地方法调用变得...

    jNative例子代码

    ava调用c程序的一个工具,同样是基于JNI的,但是使用起来超级方便,比JNA、JaWin等工具更加简单,还需要相应的dll文件,会一起上传的,这里是一个我用过的例子,希望能帮助需要的人.

    JNtiva相关jar

    先说下JAVA调用DLL,Java调用DLL的常用方法大致为几种,JNI,JNA,Jnative等,但实现与易用性差距还是很大,1.JNI用的人比较多,但相对来说比较麻烦要熟悉c并且要使用javac 及javah命令,步骤繁琐2.JNA,Jnative相对...

    JNative_1.4RC3 & 1.4RC2 & 1.3.zip

    最新 JNative_1.4RC3 & 1.4RC2 & 1.3 官方合集:bin、src文件齐全。 1.4RC3 bin - MD5:ccf311939e4b3a6e8d55813861a4a857 1.4RC3 src - MD5:2d9a4c8ac54f2f79bed260966476b776 JNative使用说明:...

    JNA-Call-DLL.tar.gz

    Java调用DLL/so源代码JNA和JNative 调用现有的.dll/.so文件,使用JNI技术调用,我们首先需要另外使用C语言写一个.dll/.so共享库,使用SUN规定的数据结构替代C语言的数据结构,调用已有的dll/so中公布的函数。

Global site tag (gtag.js) - Google Analytics