zoukankan      html  css  js  c++  java
  • Java调用DLL有多种方式,常用的方式有JNative、JNA、JNI等。

    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:WindowsSystem32下面,
    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.     } 
    17. public static void main(String[] args) throws NativeException, IllegalAccessException { 
    18.         System.err.println(GetSystemTime()); 
    19.         System.exit(0); 
    20.     } 
    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:WindowsSystem32下面,
    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.     } 
    14. public static void main(String[] args) { 
    15. // 调用printf打印信息
    16.         testdll.Instance.printf("yyyyMMdd"); 
    17.     } 
    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

    以上源代码下载

  • 相关阅读:
    Power BI for Office 365(八)共享查询
    Power BI for Office 365(七) Power BI站点
    Power BI for Office 365(六)Power Map简介
    Power BI for Office 365(五)Power View第二部分
    Power BI for Office 365(四)Power View第一部分
    Power BI for Office 365(三)Power Pivot
    Power BI for Office 365(二)Power Query
    java 继承、重载、重写与多态
    Android 热修复方案Tinker(一) Application改造
    阿里最新热修复Sophix与QQ超级补丁和Tinker的实现与总结
  • 原文地址:https://www.cnblogs.com/suizhikuo/p/8668801.html
Copyright © 2011-2022 走看看