知识大全 利用JNative实现Java调用dll动态库
Posted 文件
篇首语:不要什么话都跟别人讲,你说的是心里话,他们听的是笑话。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 利用JNative实现Java调用dll动态库相关的知识,希望对你有一定的参考价值。
利用JNative实现Java调用dll动态库 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
由于项目要求 需要用Java调用windows的dll文件 查了一下 如果用JNI的话是比较麻烦的 在上搜索了一下 Java dll 首先出现的是Jnative 于是决定用它 后来也试了些别的 但还是JNative好使 简单总结如下
Java调用动态库所需要关心的问题
l 如何装载dll文件 以及如何定位所要使用的方法
l 数据类型是如何对应的
l 如何给使用的方法传递参数
l 如何获取返回的值
JNative INFO
Resource URL:
Source Code:
Detailed Review:
JavaDOC
Version
一个开源的组件 通过它调用已有动态库中的方法就非常的方便 支持CallBack
为什么选择JNative
同类的开源组件相对活跃的还有 JNA ( Java Native Access ) Jawin Nativecall etc 但是Jnative 相对更容易使用 它对数据类型的处理做的更好
l JNA 需要用户对所使用的DLL文件事先进行封装 才能装载 另外需要在一个java接口中描述目标DLL中的函数与结构 从而使JNA自动实现Java接口到native function的映射 较麻烦
l Nativecall 暂时还不知道如何装载dll文件
l Jawin 数据类型匹配相当敏感 它采用一种叫做 instruction string 的格式来传递参数 还没有完全理解
How to
解压JNative zip 获得三个文件 分别是 JNativeCpp dll libJNativeCpp so JNative jar
JNativeCpp dll Windows下用的 拷到windows / system 目录下
libJNativeCpp so Linux下的咚咚
JNative jar 这是一个扩展包 将其copy到C:\\jdk\\jre\\lib\\ext 下(我的目录结构) 系统会自动加载
结构映射(Structure Mapping)
Type
Length
JNative class
DWORD
xvolks jnative misc basicStructures LONG
HWND
xvolks jnative misc basicStructures HWND
COLORREF
xvolks jnative misc basicStructures LONG
COLORREF*
xvolks jnative pointers Pointer
LPARAM
xvolks jnative misc basicStructures LPARAM
LPCCHOOKPROC
xvolks jnative util Callback
LPCTSTR
xvolks jnative pointers Pointer
一些关键的类及方法
Class
作用
一般用到的方法(参数略 参考Doc)
xvolks jnative Jnative
装载dll文件 定位函数
JNative() setParameter() setRetVal() getRetVal() etc
xvolks jnative pointers Pointer
替代本地函数中的的指针 需要先申请一块内存空间 才能创建
Pointer() dispose()
xvolks mory MemoryBlockFactory
申请一块内存空间
createMemoryBlock()
xvolks jnative exceptions NativeException
抛出装载 定位等方面的异常
xvolks jnative Type
列举和管理Jnative需要的不同的数据类型
(二)
简单测试 Javadoc 下和官方网上有些例子 下面的是我随便从IC读卡程序中找了个DLL进行的测试
SCReader dll 下的SCHelp_HexStringToBytes()函数原型
SCREADER_API WINAPI long SCHelp_HexStringToBytes(
LPCTSTR pSrc
BYTE* pTar
int MaxCount
);
注意 dll文件需要放到System 下 否则可能找不到
通过Jnative 用java 来调用代码如下
package onlyfun dllcall;
import xvolks jnative JNative;
import xvolks jnative exceptions NativeException;
import xvolks jnative pointers Pointer;
import xvolks mory MemoryBlockFactory;
import xvolks jnative Type;
public class UserCall
/**
* return 转换成功的字节数
*/
static JNative Something = null;
static Pointer pointer;
public String getSomething(String pSrc Pointer pTar int MaxCount) throws NativeException IllegalAccessException
try
if(Something == null)
pTar = new Pointer(MemoryBlockFactory createMemoryBlock( ));
Something = new JNative( SCReader DLL SCHelp_HexStringToBytes );
// 利用 xvolks jnative JNative 来装载 SCReader dll 并利用其SCHelp_HexStringToBytes方法
Something setRetVal(Type INT);
// 指定返回参数的类型
int i= ;
Something setParameter(i++ pSrc);
Something setParameter(i++ pTar);
Something setParameter(i++ MaxCount);
System out println( 调用的DLL文件名为 +Something getDLLName());
System out println( 调用的方法名为 +Something getFunctionName());
//传值
Something invoke();//调用方法
return Something getRetVal();
finally
if(Something!=null)
Something dispose();//释放
public Pointer creatPointer() throws NativeException
pointer = new Pointer(MemoryBlockFactory createMemoryBlock( ));
pointer setIntAt( );
return pointer;
public static void main(String[] args) throws NativeException IllegalAccessException
UserCall uc = new UserCall();
String result = uc getSomething( FFFFF uc creatPointer() );
System err println( 转换成功的字节数为 +result);
TestCallback runIt();
cha138/Article/program/Java/hx/201311/26786
相关参考
知识大全 Delphi 中动态链接库(dll)的建立和使用[2]
Delphi中动态链接库(dll)的建立和使用[2] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
知识大全 Delphi 中动态链接库(dll)的建立和使用[1]
Delphi中动态链接库(dll)的建立和使用[1] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
VB动态调用自己的ActiveXDLL 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &
在C#中动态调用nativedll的导出函数 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 在C
Delphi中动态链接库两种调用方式的比较 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!一动态链接
JNA调用DLL一点小结 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &n
asp调用C#编写的DLL发送邮件 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 一直想写一个a
C#使用Dllmport来调用dephi的dll 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&n
怎样在MFC中调用C#编写的DLL 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 一使用/clr
知识大全 如何在Delphi中调用.Net编写的DLL中的函数
如何在Delphi中调用.Net编写的DLL中的函数 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!