`
shanhestm
  • 浏览: 12984 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论

java驱动dll文件

    博客分类:
  • Java
阅读更多

由于项目需要,要驱动dll文件从平台中取值,所有做了一个java类读取dll文件,执行函数

 

package com.stm.dll;

import org.xvolks.jnative.JNative;
import org.xvolks.jnative.Type;
import org.xvolks.jnative.pointers.Pointer;
import org.xvolks.jnative.pointers.memory.MemoryBlockFactory;

/**
 * 执行此函数需要把JNative.jar中的lib-bin\JNativeCpp.dll文件拷贝到C:\Windows\System32下;
 * 并且把zjnet.dll文件也拷贝到C:\Windows\System32下
 * @author LOVCC
 * @date 2011/12/28
 *
 */
public class JavaCallsDLL {

	//系统调用的dll文件名
	private static final String dllName = "zjnet.dll" ;
	
	//dll文件中定义的初始化函数
	private static final String initFunName = "InitSocketEnvironment" ;
	
	//dll文件中定义的交易函数
	private static final String tradeFunName = "SendDateToTXZFAndReceiveFromTXZF" ;
	
	//dll文件中定义的释放资源函数
	private static final String closeFunName = "FinalSocketEnvironment" ;
	
	//为返回消息而设置的内存大小
	private static final int memorySize = 65535 ;
	
	//JNative对象用于操作dll文件
	private static JNative jn = null ;
	
	/**
	 * 初始化资源
	 * @return 返回初始化的状态码
	 * 			>0 代表成功
	 * @throws Exception
	 */
	public static int open() throws Exception {
		jn = new JNative(dllName, initFunName) ;
		jn.setRetVal(Type.INT);
		jn.invoke() ;
		return jn.getRetValAsInt() ;
	}
	
	/**
	 * 交易函数
	 * @param send 
	 * @param receive 
	 * @return 返回执行函数的信息
	 * 		   失败返回null
	 * @throws Exception
	 */
	public static String trade(String send, String receive) throws Exception{
		jn = new JNative(dllName, tradeFunName) ;
		jn.setRetVal(Type.INT) ;
		Pointer point = new Pointer(MemoryBlockFactory.createMemoryBlock(memorySize));
		point.setStringAt(0, receive) ;
		jn.setParameter(0, Type.STRING, send) ;
		jn.setParameter(1, point) ;
		jn.invoke() ;
		int i = jn.getRetValAsInt() ;
		if(i>=0){
			String str = point.getAsString() ;
			point.dispose() ;
			return str ;
		}
		else 
			return null;
	}
	
	/**
	 * 释放系统资源函数
	 * @return
	 * @throws Exception
	 */
	public static String close() throws Exception{
		int i ;
		String message ;
		jn = new JNative(dllName, closeFunName) ;
		jn.setRetVal(Type.INT);
		jn.invoke() ;
		i = jn.getRetValAsInt() ;
		if(i>0)
			message = "资源释放成功!" ;
		else
			message = "资源释放失败!" ;
		return message ;
	}
	
	/**
	 * 把以上三个函数封装
	 * 调用函数直接执行
	 * 初始化信息,进行交易,释放资源
	 * 三步
	 * @param send
	 * @param receive
	 * @return 返回交易信息
	 */
	public static String getInfo(String send, String receive){
		String info = null ;
		try{
			int i = open() ;
			if(i>0)
				info = trade(send, receive) ;
			else
				throw new Exception("建立连接失败") ;
			System.out.println(close()) ;
		}catch(Exception e){
			e.printStackTrace() ;
		}
		return info ;
	}

}

 

 类用到了JNative插件来操作dll文件的

JNative中有个类Pointer实现了类似于c语言中的指针的作用!当是以为实现指针是驱动了自己jar包中dll文件实现的,但是我把C:\Windows\System32下的JNativeCpp.dll和它自身jar包中的JNativeCpp.dll都删了,但是它依然可以工作,于是查看源代码,结果更迷惑了!!!

Pointer是用setStringAt方法往里面赋值的,而setStringAt方法调用了JNative.setMemory()方法,

JNative.setMemory()方法调用了自身的nSetMemory()方法,但是 nSetMemory方法是这样定义的:

 

private static native void nSetMemory(int pointer, byte[] buff, int offset,
            int len) throws NativeException;
 

 

到这里就结束了.........

到底也不知道它是怎么实现Pointer的???

分享到:
评论

相关推荐

    读卡器驱动文件javaRD800.dll

    读卡器驱动文件javaRD800.dll

    java连接dll文件的驱动,jnative.jar

    注意,由于DLL是平台相关的,因此在不同的操作系统上,可能需要不同的DLL文件,或者需要重新编译本地代码以适应目标平台。 总的来说,`jnative.jar`提供了一个相对简单的途径,让Java开发者能够利用DLL资源,而无需...

    java操作word xml dll文件

    在Java编程环境中,操作Word、XML以及DLL文件涉及多个技术和库。下面将详细阐述这些方面的知识。 1. **Java操作Word文件**: - **Apache POI**:这是最常用的Java库,用于读写Microsoft Office格式的文件,包括...

    java连接SQL Server数据库需要的dll文件

    在Java连接SQL Server时,除了需要包含JDBC驱动的jar文件外,某些情况下可能还需要特定的dll文件,尤其是当SQL Server不在同一台机器上运行或者使用了特定版本时。以下将详细讲解这个过程中的关键知识点。 首先,...

    JAVA调用GDAL库需要的dll文件

    下面将详细讲解如何在Java中调用GDAL库以及与之相关的dll文件。 1. **GDAL与DLL文件**: GDAL的核心功能实现是在一系列的动态链接库(DLL)中,这些库在Windows系统上表现为.dll文件。例如,`gdal201.dll`是GDAL的...

    TSCLIB java驱动打印文件,包括32位和64位

    标题 "TSCLIB java驱动打印文件,包括32位和64位" 指的是一个专门为Java应用程序设计的库,用于实现打印机驱动功能。这个库涵盖了32位和64位操作系统的需求,确保在不同硬件环境下的兼容性。TSCLIB可能是由“TSCLIB...

    ORACLE 10G java 驱动包

    Oracle 10G Java驱动包是Oracle数据库与Java应用程序交互的重要组成部分,主要包含两个关键的JAR文件:`classes12.jar` 和 `ojdbc14.jar`。这两个文件为Java开发者提供了连接Oracle 10G数据库的必要工具,使得在Java...

    java串口通讯驱动文件(32-64)rxtxserial.dll&&rxtxParallel;.dll

    内含windows64和windows32位版本 拷贝 rxtxSerial.dll 到 <JAVA_HOME>\jre\bin目录中; 拷贝 rxtxParallel.dll 到 <JAVA_HOME>\jre\bin目录中;

    TSC 驱动dll

    TSC驱动DLL通常支持多种编程语言,如C++、VB.NET、C#、Java等,这样不论你熟悉哪种语言,都能方便地集成TSC打印机的功能。在实际应用中,你可能需要设置正确的端口通信(如USB、串口或网络端口)、配置打印参数(如...

    Java和DLL(COM)互操作 Jawin

    3. **调用硬件驱动**:通过DLL,Java程序可以直接与硬件设备进行通信,如打印机、扫描仪等。 4. **利用已有的COM组件**:如Microsoft Office自动化,可以从Java程序中自动化Word、Excel等Office任务。 在使用Jawin...

    pos机java调用程序demo(基于dll调用)

    在本文中,我们将深入探讨如何使用Java调用DLL库,特别是在银联POS机接口的集成应用上。这个项目是基于JDK1.8开发的,它利用了Maven作为项目管理工具,使得开发者能够更方便地引用和管理DLL库。对于那些在IT行业,...

    USB端口JAR、DLL文件.zip

    本压缩包"USB端口JAR、DLL文件.zip"包含的资源可能用于开发或使用与USB端口相关的Java应用程序和Windows系统功能。 首先,让我们详细了解一下JAR文件。JAR文件是Java平台特有的归档格式,用于集合多个Java类文件、...

    zebra连接打印机dll包

    要使用这些dll文件,你需要在Java代码中设置相应的系统属性,指定dll的路径,并通过JNI调用其中的函数。首先,确保你的Java环境和打印机驱动匹配,如果是64位系统,使用`ZebraNativeUsbAdapter_64.dll`,反之则用`...

    sql server 2005 java驱动包

    "SQL Server 2005 Java驱动包"就是为了让Java应用程序能够连接到SQL Server 2005数据库,进行数据的增删改查等操作。 Java驱动包,也被称为JDBC驱动(Java Database Connectivity),是Java与数据库之间通信的桥梁...

    java3d dll(4个)+jar包(for x64)

    在Java3D中,这些DLL文件可能包含了底层的图形渲染引擎,如OpenGL或DirectX的接口,使得Java应用程序能够与操作系统进行交互,执行3D图形的绘制和处理。这4个DLL文件可能包括了不同功能模块,例如渲染、几何计算、...

    jbarcode+Jnative读取本地第三方的dll文件+得力+斑马打印机使用javaAPI打印 demo

    这个项目“jbarcode+Jnative读取本地第三方的dll文件+得力+斑马打印机使用javaAPI打印 demo”提供了一个解决方案,它结合了几个关键的技术点,使得在Java环境中实现对特定打印机,如得力和斑马打印机的打印功能成为...

    Java调用DLL.rar

    - **在Java中加载本地库**:使用`System.loadLibrary()`加载生成的DLL文件。 ```java public class Main { public static void main(String[] args) { MyDLL myDLL = new MyDLL() {}; System.loadLibrary(...

    Java 3D必备dll

    总之,Java 3D必备的DLL文件是Java 3D在Windows系统上运行的关键组成部分,它们实现了对Direct3D和OpenGL图形接口的支持,从而提供了高效、跨平台的3D图形编程能力。开发者在进行Java 3D编程时,必须确保这些依赖项...

    java 操作 明华RD读卡器 调用Mwic_32.dll函数

    1. **配置环境**:在开始之前,确保已经正确安装了明华RD读卡器的驱动,并且该DLL文件位于系统路径或者Java可以找到的位置。如果需要,可以通过`System.loadLibrary("Mwic_32")`来指定DLL的绝对路径。 2. **创建JNI...

    TSC打印机驱动和dll_TSCLib.dll_TSC驱动_jna_TSCActiveX下载_

    2. Java Native Access (JNA):Java与本地库交互的库,使Java可以调用`TSCLib.dll`的函数。 3. `jna-platform.jar`和`jna.jar`:JNA库的组成部分,需要添加到项目类路径以支持JNA功能。 4. `System.loadLibrary()`:...

Global site tag (gtag.js) - Google Analytics