下文参考自:http://blog.163.com/wex660@126/blog/static/2415306520103142363964/

因为项目需要,用到了java调用dll文件中的方法。写成dll文件大多是用C、VB、Delphi语言弄成的,对于我这个纯粹干java的人员来说,着实让我太为难了。唉,也就是说我编程底子没有搭好,惭愧。要是这些语言我都会些,也不至少让我了解并应用这个技术花了很长时间。
我是用JNative技术做的一个例子。需要用到的是:JNative.jar,JNative.dll这些是在Windows中开发的,如果用Linus要用到libJNative.so
1.将JNative.dl,所要读的dll文件l放在C:\windows\system32下面。
2.将JNative.jar放在你的项目下的lib下面
3.将要读的dll文件放在跟使用的类相同的目录下。
4.我的类的源码 .MemoryBlockFactory;

public class SystemTime extends AbstractBasicData<SystemTime>{public short wYear;public short wMonth;public short wDayOfWeek;public short wDay;public short wHour;public short wMinute;public short wSecond;public short wMilliseconds;/*** 分配内存,并返回指针*/public Pointer createPointer() throws NativeException {pointer = new Pointer(MemoryBlockFactory.createMemoryBlock(getSizeOf()));return pointer;}/*** 内存大小*/public int getSizeOf(){return 8 * 2;}/*** 获取通过内存指针解析出结果*/public SystemTime getValueFromPointer() throws NativeException {wYear = getNextShort();wMonth = getNextShort();wDayOfWeek = getNextShort();wDay = getNextShort();wHour = getNextShort();wMinute = getNextShort();wSecond = getNextShort();wMilliseconds = getNextShort();return this;}public SystemTime() throws NativeException{super(null);createPointer();}public String toString(){return wYear + "/" + wMonth + "/" + wDay + " at + " + wHour + ":" + wMinute + ":" + wSecond + ":" + wMilliseconds;}public static SystemTime GetSystemTime() throws NativeException, IllegalAccessException {// 创建对象JNative nGetSystemTime = new JNative("Kernel32.dll", "GetSystemTime");SystemTime systemTime = new SystemTime();// 设置参数nGetSystemTime.setParameter(0, systemTime.getPointer());nGetSystemTime.invoke();// 解析结构指针内容return systemTime.getValueFromPointer();}public static void main(String[] args) throws NativeException, IllegalAccessException{System.err.println(GetSystemTime());}}

注:Kernel32.dll是我要读的dll文件,GetSystemTime是dll文件中的方法(就是所谓的函数名)

That's ok,相信我这么不懂dll的都能做出来,你也能

===============================另一个参考====================================

下文参考自:http://blog.csdn.net/volant_hoo/article/details/2102726

因为项目需求,需要在java中调用dll文件。测试过几种方法,发现还是JNative最为便利。

1.   安装

到jnative.sourceforge.net下载最新的JNative二进制包,解压后得到3个文件:JNativeCpp.dll,libJNativeCpp.so,JNative.jar,其中:

JNativeCpp.dll     放在windows/system32目录下

libJNativeCpp.so    linux下使用

JNative.jar          导入工程中

2.   使用

2.1.     加载dll文件

JNative可使用两种方式加载dll文件:

使用System.loadLibrary加载

使用此方法可加载系统目录中的dll文件。可以先把dll文件复制到system32目录下,使用文件前缀名作为参数来加载dll文件。

使用System.load加载

此方法参数为dll文件全路径名。

2.2.     调用函数

1、首先创建JNative对象:

JNative jnative = new JNative(dll文件名, 函数名);

2、设置返回值类型:

jnative.setRetVal(Type.INT);

3、设置参数

jnative.setParameter(0, Type.STRING, …); //设置第一个参数为字符串

jnative.setParameter(1, Type.INT, String.valueof(…));       //设置第二个参数为整数

4、执行

n.invoke();

5、获取返回值

Integer.parseInt(jnative.getRetVal());

2.3.     一个实例

来自国外网上的一个实例,用于摸索struct处理方法:

import org.xvolks.jnative.JNative;
import org.xvolks.jnative.exceptions.NativeException;
import org.xvolks.jnative.misc.basicStructures.AbstractBasicData;
import org.xvolks.jnative.pointers.Pointer;
import org.xvolks.jnative.pointers.memory.MemoryBlockFactory;/*** SystemTime* * typedef struct _SYSTEMTIME {*     WORD wYear;*     WORD wMonth;*     WORD wDayOfWeek;*     WORD wDay;*     WORD wHour;*     WORD wMinute;*     WORD wSecond;*     WORD wMilliseconds;* } SYSTEMTIME, */
public class SystemTime extends AbstractBasicData<SystemTime> {public short wYear;public short wMonth;public short wDayOfWeek;public short wDay;public short wHour;public short wMinute;public short wSecond;public short wMilliseconds;/*** 分配内存,并返回指针*/public Pointer createPointer() throws NativeException {pointer = new Pointer(MemoryBlockFactory.createMemoryBlock(getSizeOf()));return pointer;}/*** 内存大小*/public int getSizeOf() {return 8 * 2;}/*** 获取通过内存指针解析出结果*/public SystemTime getValueFromPointer() throws NativeException {wYear = getNextShort();wMonth = getNextShort();wDayOfWeek = getNextShort();wDay = getNextShort();wHour = getNextShort();wMinute = getNextShort();wSecond = getNextShort();wMilliseconds = getNextShort();return this;}public SystemTime() throws NativeException {super(null);createPointer();}public String toString() {return wYear + "/" + wMonth + "/" + wDay + " at + " + wHour + ":" + wMinute + ":" + wSecond+ ":" + wMilliseconds;}public static SystemTime GetSystemTime() throws NativeException, IllegalAccessException {// 创建对象JNative nGetSystemTime = new JNative("Kernel32.dll", "GetSystemTime");SystemTime systemTime = new SystemTime();// 设置参数nGetSystemTime.setParameter(0, systemTime.getPointer());nGetSystemTime.invoke();// 解析结构指针内容return systemTime.getValueFromPointer();}public static void main(String[] args) throws NativeException, IllegalAccessException {System.err.println(GetSystemTime());}}

java如何利用JNative调用dll文件相关推荐

  1. java中调用dll文件的两种方法

    https://www.cnblogs.com/huozhong/p/5830485.html JNA地址:http://blog.csdn.net/shendl/article/details/35 ...

  2. 关于java调用Dll文件的异常 %1 不是有效的 Win32 应用程序。

    关于java调用Dll文件的异常 %1 不是有效的 Win32 应用程序. 参考文章: (1)关于java调用Dll文件的异常 %1 不是有效的 Win32 应用程序. (2)https://www. ...

  3. 关于java调用Dll文件的异常 Native library (win32-x86-64/CtrlNPCDLL.dll) not found in resource pat

    关于java调用Dll文件的异常 Native library (win32-x86-64/CtrlNPCDLL.dll) not found in resource pat 参考文章: (1)关于j ...

  4. 利用JNative调用MediaInfo.dll

    利用JNative调用MediaInfo.dll实现获取媒体信息 MediaInfo mi = new MediaInfo();  mi.Open(dir+filename); String info ...

  5. java jni dll路径_Java中Jni调用DLL文件试验

    Java中Jni调用DLL文件试验 下面是小编整理的Java中Jni调用DLL文件试验内容,希望可以为您带来帮助!更多内容请关注应届毕业生考试网! 所有文件均在E:\路径下. 安装jdk1.6.0_0 ...

  6. Java如何利用JNI调用C++(简略介绍及步骤)

    Java如何利用JNI调用C++(简略介绍及步骤) 文章目录 Java如何利用JNI调用C++(简略介绍及步骤) 一.原理介绍 二.详细步骤 步骤一:编写Java类 步骤二:生成.h文件 步骤三:CL ...

  7. labview如何加载库_LabVIEW如何方便地调用DLL文件

    转自:http://bbs.elecfans.com/jishu_469502_1_1.html LabVIEW调用DLL文件 LabVIEW支持通过调用DLL文件的方式与其它编程语言混合使用.比如, ...

  8. jar调用dll文件提示找不到指定的模块Unable to load library

    目录 问题描述 解决方案一 解决方案二 效果 补充说明 参考链接 问题描述 在Windows系统上,自己开发的需要使用JNA调用动态链接库dll文件的Swing项目(Java简易系统监视器system ...

  9. 使用Java中的jna调用dll

    简介: 在我们日常编码中在与硬件通信或者与其他的c++平台通信的时候经常用java调用dll文件,下面我们介绍俩种使用jna调用dll的方式. 如果是自己部门写的dll文件,一般会有头文件,头文件中会 ...

最新文章

  1. NSArray,NSSet,NSDictionary总结 (转)
  2. C# - 委托中的逆变
  3. SARscape_5.2.0和SARscape_5.2.1安装包下载
  4. 2012服务器文件加密,Windows Server 2012安全方面的改变_服务器评测与技术-中关村在线...
  5. arcgis js 4.x 地图中加入图片
  6. 求1到n ,这n个整数的二进制表示比特1的个数(时间复杂度:O(n))
  7. 一文带你初识---虚拟dom
  8. bmp文件头_图像算法原理与实践——图像文件存储
  9. Python库大全涵盖了Python应用的方方面面建议收藏留用!
  10. cxgrid中纵横单元格合并_逆向查询合并单元格中的数据,这两种方法你值得拥有...
  11. cat 监控 java,分布式监控CAT客户端的SpringBoot集成
  12. 前端分页功能(通用)
  13. 笔记本电脑找不到个人热点的解决方法
  14. 用python 读取excel 指定列
  15. 急!程序员夫妻结婚了,婚戒上刻什么字好?
  16. 先验概率和后验概率那点事儿
  17. 推荐一个svg转ico的在线网站(非常清晰)
  18. PXE网络批量装机+Kickstart无人值守安装
  19. IT人员必学最基础知识(四)——补充总结
  20. Cognos产品功能介绍

热门文章

  1. RXD与TXD如何连接
  2. gazebo 添加16线velodyne激光雷达 详细教程
  3. sping boot 笔记 哎呦不错哦
  4. Arduino开发之Relay Module
  5. 【每日早报】2019/06/25
  6. ProjectDay04
  7. Bark 使用指南:如何自建 iOS 消息推送服务
  8. 感谢这一年的尚不如愿,这是下一年必须努力的理由
  9. Python 3 字符串 encode( ) 方法
  10. 梁静茹晒巨肚孕照引惊叹 被疑怀双胞胎