JNative方式调用dll

JNative是一种能够使Java语言使调用DLL的一种技术,对JNI进行了封装,可能有些读者会有这样一个问题,JNative对JNI进行了封装,并且是一种跨语言的使用DLL,会不会在效率方面很不如人意,我可以用我使用Jnative的经验告诉你,不会!因为我用Jnative就是用来处理大量的数据调用,是基于实时数据库接口的调用。而实时数据库的数据量是非常大的。

首先下载JNative

注意:将JNative解压,并将其中的JNativeCpp.dll拷贝到system32文件夹中,libJNativeCpp.so是linux平台使用的。

代码:

[java] view plain copy

  1. package com.tvjody; 
  2. import org.xvolks.jnative.JNative; 
  3. import org.xvolks.jnative.exceptions.NativeException; 
  4. import org.xvolks.jnative.util.Kernel32.SystemTime; 
  5. public class Demo { 
  6. public static SystemTime GetSystemTime() throws NativeException, IllegalAccessException { 
  7. // Kernel32.dll为dll名称,Kernel32目录的位置为:C:\Windows\System32下面,
  8. // GetSystemTime为Kernel32.dll中的一个方法.
  9. JNative nGetSystemTime = new JNative("Kernel32", "GetSystemTime"); 
  10. SystemTime systemTime = new SystemTime(); 
  11. // 设置参数
  12. nGetSystemTime.setParameter(0, systemTime.getPointer()); 
  13. nGetSystemTime.invoke(); 
  14. // 解析结构指针内容
  15. return systemTime.getValueFromPointer(); 
  16. public static void main(String[] args) throws NativeException, IllegalAccessException { 
  17. System.err.println(GetSystemTime()); 
  18. System.exit(0); 
  19. }
JNA方式调用dll

JNA(Java Native Access)框架是一个开源的Java框架,是SUN公司主导开发的,建立在经典的JNI的基础之上的一个框架。

首先下载JNA

代码:

[java] view plain copy

  1. package com.tvjody; 
  2. import com.sun.jna.Library; 
  3. import com.sun.jna.Native; 
  4. import com.sun.jna.Platform; 
  5. public class JNA { 
  6. // 定义接口CLibrary,继承自com.sun.jna.Library
  7. public interface testdll extends Library { 
  8. // msvcrt为dll名称,msvcrt目录的位置为:C:\Windows\System32下面,
  9. testdll Instance = (testdll) Native.loadLibrary((Platform.isWindows() ? "msvcrt" : "c"), 
  10. testdll.class); 
  11. // printf为msvcrt.dll中的一个方法.
  12. void printf(String format, Object... args); 
  13. public static void main(String[] args) { 
  14. // 调用printf打印信息
  15. testdll.Instance.printf("yyyyMMdd"); 
  16. }
JNI调用dll

如果有一个现有的.dll/.so文件,如果使用JNI技术调用,我们首先需要另外使用C语言写一个.dll/.so共享库,使用SUN规定的数据结构替代C语言的数据结构,调用已有的dll/so中公布的函数。
然后再在Java中载入这个适配器dll/so,再编写Java   native函数作为dll中函数的代理。经过2个繁琐的步骤才能在Java中调用本地代码。
因此,很少有Java程序员愿意编写调用dll/.so库中的原生函数的java程序。这也使Java语言在客户端上乏善可陈。可以说JNI是Java的一大弱点!只提供几个链接吧!

http://blog.sina.com.cn/s/blog_6c3b9ed40100xyl8.html
http://www.open-open.com/home/space-37924-do-blog-id-5681.html

以上源代码下载

Java调用DLL有多种方式,常用的方式有JNative、JNA、JNI等。的更多相关文章

  1. java调用dll/so文件

    大家都知道用C++编写的程序如果用于windows使用则编译为xxx.dll文件,如果是Linux使用则编译为libxxx.so文件.下面将java调用dll/so文件的方法粘出来方便下次使用.此处使 ...

  2. Java 调用Dll

    Java 中怎么能调用到dll中的函数呢? 关键是java中生的本地函数名參数和dll中的本地函数名參数一模一样. 这个程序是java中调用dll中的求和函数. 一,java代码部分操作 1.新建pr ...

  3. Java调用dll动态库

    最近项目里使用java调用dll动态库,因此研究了一下这方面的东西. 使用的工具包如下 <dependency> <groupId>net.java.dev.jna</g ...

  4. Android-WebView与本地HTML (Java调用--->HTML的方法)-(new WebView(this)方式)

    之前的博客,Android-WebView与本地HTML (Java调用--->HTML的方法),是在 findViewById(R.id.webview);,来得到WebView, 此博客使用 ...

  5. java调用dll或so动态库文件(c++/c)

    java调用dll或so动态库文件(c++/c) 博客分类:  工作 CC#C++JavaEclipse  java调用dll或so动态库文件(c++/c)开发平台:Eclipse3.3.1.1+CD ...

  6. 在Windows中实现Java调用DLL(转载)

    本文提供调用本地 C 代码的 Java 代码示例,包括传递和返回某些常用的数据类型.本地方法包含在特定于平台的可执行文件中.就本文中的示例而言,本地方法包含在 Windows 32 位动态链接库 (D ...

  7. Java调用.dll文件

    因为项目的需求,要在JAVA项目中调用Windows的Dll(动态链接库)文件,之前用Jni调用过C写的Dll文件,比较麻烦,这里不多说,网上也有很多这方面的文档.在网上找到一个开源的组件JNativ ...

  8. Java 调用 C++ (Java 调用 dll)康哥手把手教你

    摘要: 本文原创,转载请注明地址 http://www.cnblogs.com/baokang/p/4979243.html 因为要做点图形处理的项目,需要在Java中调用dll库,所以开发的第一步是 ...

  9. Java 调用Restful API接口的几种方式--HTTPS

    摘要:最近有一个需求,为客户提供一些Restful API 接口,QA使用postman进行测试,但是postman的测试接口与java调用的相似但并不相同,于是想自己写一个程序去测试Restful ...

随机推荐

  1. Python3 简明教程学习(上)

    一.开始 Python 之旅交互模式 1.Ctrl + D 输入一个 EOF 字符来退出解释器,也可以键入 exit() 来退出 2.#!/usr/bin/env python3 中#!称为 Sheb ...

  2. 图片视频访问servlet(支持苹果视频断点续传)

    package com.sm.common.servlet; import java.io.File; import java.io.FileInputStream; import java.io.F ...

  3. javascript编写带阴历的黄历

    最近在做一个黄历的快应用(quickapp),需要涉及到公历转阴历,效果如下: 快应用(https://www.quickapp.cn/): 快应用是基于手机硬件平台的新型应用形态:标准是由主流手机厂 ...

  4. 如何将你的github仓库部署到github pages

    很多时候我都在思考一个问题,我们每天遇到各种各样的问题,然后我们需要不断google.百度,达到我们解决问题的目的.但是在这个过程中,我们总是能够见到,对于同一个问题,总是有大量错误.copy的博客. ...

  5. LOJ.2721.[NOI2018]屠龙勇士(扩展CRT 扩展欧几里得)

    题目链接 LOJ 洛谷 rank前3无压力(话说rank1特判打表有意思么) \(x*atk[i] - y*p[i] = hp[i]\) 对于每条龙可以求一个满足条件的\(x_0\),然后得到其通解\ ...

  6. FireDAC 下的 Sqlite [8] - 自定义函数

    Sqlite 本身没有这个功能, FireDAC 通过 TFDSQLiteFunction 增加了该功能; 尽管通过某些 SQL 语句或通过视图也可以达到类似效果, 但函数会更灵活些. 本例先建了一个 ...

  7. Jenkins部署在Tomcat容器提示:反向代理设置有误

    这个错误我研究了一下,应该是部署在Tomcat时特有的错误,并且我把启动的目录设置成ROOT同样也还在,网上说在系统设置里面的Jenkins URL设置后可以解决,但我测试了同样不行. 如果使用jav ...

  8. 【报错】RSA host key for 192.168.1.xxx has changed and you have requested strict checking.

    执行如下对机拷贝命令 scp .ssh/id_rsa.pub phpgo@192.168.1.35:~ 时,报错 RSA host key for 192.168.1.xxx has changed ...

  9. SQL Server on Linux

    https://edu.aliyun.com/course/51/lesson/list?spm=5176.8764728.aliyun-edu-course-tab.2.4YyLGD&pre ...

  10. hdu 1042 N! 高精度运算

    N!                                                                              Time Limit: 10000/50 ...