由于项目需要,要驱动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
注意,由于DLL是平台相关的,因此在不同的操作系统上,可能需要不同的DLL文件,或者需要重新编译本地代码以适应目标平台。 总的来说,`jnative.jar`提供了一个相对简单的途径,让Java开发者能够利用DLL资源,而无需...
在Java编程环境中,操作Word、XML以及DLL文件涉及多个技术和库。下面将详细阐述这些方面的知识。 1. **Java操作Word文件**: - **Apache POI**:这是最常用的Java库,用于读写Microsoft Office格式的文件,包括...
在Java连接SQL Server时,除了需要包含JDBC驱动的jar文件外,某些情况下可能还需要特定的dll文件,尤其是当SQL Server不在同一台机器上运行或者使用了特定版本时。以下将详细讲解这个过程中的关键知识点。 首先,...
下面将详细讲解如何在Java中调用GDAL库以及与之相关的dll文件。 1. **GDAL与DLL文件**: GDAL的核心功能实现是在一系列的动态链接库(DLL)中,这些库在Windows系统上表现为.dll文件。例如,`gdal201.dll`是GDAL的...
标题 "TSCLIB java驱动打印文件,包括32位和64位" 指的是一个专门为Java应用程序设计的库,用于实现打印机驱动功能。这个库涵盖了32位和64位操作系统的需求,确保在不同硬件环境下的兼容性。TSCLIB可能是由“TSCLIB...
Oracle 10G Java驱动包是Oracle数据库与Java应用程序交互的重要组成部分,主要包含两个关键的JAR文件:`classes12.jar` 和 `ojdbc14.jar`。这两个文件为Java开发者提供了连接Oracle 10G数据库的必要工具,使得在Java...
内含windows64和windows32位版本 拷贝 rxtxSerial.dll 到 <JAVA_HOME>\jre\bin目录中; 拷贝 rxtxParallel.dll 到 <JAVA_HOME>\jre\bin目录中;
TSC驱动DLL通常支持多种编程语言,如C++、VB.NET、C#、Java等,这样不论你熟悉哪种语言,都能方便地集成TSC打印机的功能。在实际应用中,你可能需要设置正确的端口通信(如USB、串口或网络端口)、配置打印参数(如...
3. **调用硬件驱动**:通过DLL,Java程序可以直接与硬件设备进行通信,如打印机、扫描仪等。 4. **利用已有的COM组件**:如Microsoft Office自动化,可以从Java程序中自动化Word、Excel等Office任务。 在使用Jawin...
在本文中,我们将深入探讨如何使用Java调用DLL库,特别是在银联POS机接口的集成应用上。这个项目是基于JDK1.8开发的,它利用了Maven作为项目管理工具,使得开发者能够更方便地引用和管理DLL库。对于那些在IT行业,...
本压缩包"USB端口JAR、DLL文件.zip"包含的资源可能用于开发或使用与USB端口相关的Java应用程序和Windows系统功能。 首先,让我们详细了解一下JAR文件。JAR文件是Java平台特有的归档格式,用于集合多个Java类文件、...
要使用这些dll文件,你需要在Java代码中设置相应的系统属性,指定dll的路径,并通过JNI调用其中的函数。首先,确保你的Java环境和打印机驱动匹配,如果是64位系统,使用`ZebraNativeUsbAdapter_64.dll`,反之则用`...
"SQL Server 2005 Java驱动包"就是为了让Java应用程序能够连接到SQL Server 2005数据库,进行数据的增删改查等操作。 Java驱动包,也被称为JDBC驱动(Java Database Connectivity),是Java与数据库之间通信的桥梁...
在Java3D中,这些DLL文件可能包含了底层的图形渲染引擎,如OpenGL或DirectX的接口,使得Java应用程序能够与操作系统进行交互,执行3D图形的绘制和处理。这4个DLL文件可能包括了不同功能模块,例如渲染、几何计算、...
这个项目“jbarcode+Jnative读取本地第三方的dll文件+得力+斑马打印机使用javaAPI打印 demo”提供了一个解决方案,它结合了几个关键的技术点,使得在Java环境中实现对特定打印机,如得力和斑马打印机的打印功能成为...
- **在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在Windows系统上运行的关键组成部分,它们实现了对Direct3D和OpenGL图形接口的支持,从而提供了高效、跨平台的3D图形编程能力。开发者在进行Java 3D编程时,必须确保这些依赖项...
1. **配置环境**:在开始之前,确保已经正确安装了明华RD读卡器的驱动,并且该DLL文件位于系统路径或者Java可以找到的位置。如果需要,可以通过`System.loadLibrary("Mwic_32")`来指定DLL的绝对路径。 2. **创建JNI...
2. Java Native Access (JNA):Java与本地库交互的库,使Java可以调用`TSCLib.dll`的函数。 3. `jna-platform.jar`和`jna.jar`:JNA库的组成部分,需要添加到项目类路径以支持JNA功能。 4. `System.loadLibrary()`:...