Java调用dll动态库

一、什么是dll文件

    DLL(Dynamic Link Library)文件为动态链接库文件,又称应用程序拓展,是软件文件类型。在Windows中,许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库,即DLL文件,放置于系统中。当我们执行某一个程序时,相应的DLL文件就会被调用。一个应用程序可使用多个DLL文件,一个DLL文件也可能被不同的应用程序使用,这样的DLL文件被称为共享DLL文件。

二、Java调用dll文件方法

 1.Jna调用动态库

    JNAJava Native Access )提供一组Java工具类用于在运行期动态访问系统本地库(native library:如Windowdll)而不需要编写任何Native/JNI代码。开发人员只要在一个java接口中描述目标native library的函数与结构,JNA将自动实现Java接口到nativefunction的映射。

   使用步骤:

     (1):调入jar包,使用Jna之前我们需要在项目中首先导入Jnajar包,有两个,jna-3.3.0-platform.jar jna.jar.下载:点击打开链接

     (2):将需要调用的第三方dll文件放在项目的根目录下

     (3):编写调用的方法
package com.test.dll;

import com.sun.jna.Library;import com.sun.jna.Native;

/**
 * dll文件名称 dll.dll
 * dll文件方法名function,参数类型String,返回类型String
 * @author july
 *
 */
public class JNATest{
    public interface JNATestDll extends Library{
        //dll文件放在C:\Windows\System32下
        JNATestDll instanceDll  = (JNATestDll)Native.loadLibrary("dll.dll",JNATestDll.class);
        public String function(String param);
    }
    public static void main(String[] args) {
        String param="aa";
        String returnvalue = JNATestDll.instanceDll.function(param);
        System.out.println("returnvalue = "+returnvalue);
    }
}

2.Jnative调用动态库
使用步骤:
(1):首先下载JNativejar包,其中包含JNative.jar, JNativeCpp.dll, libJNativeCpp.so这三个包。
     JNative.jar是需要导入到Java工程的lib下。通过Build Path即可导入。建议将JNative.jar放在jdkjre\lib\ext文件里。
    JNativeCpp.dll是必须放入到jdkjre\bin文件里,否则就会报JNative找不到的错误。
    libJNativeCpp.soLinux操作系统的,暂时不予说明。
(2):由于JNativeCpp.dll32windows程序,所以需要下载jdk 32位的版本才可以。这一点要注意了.

(3):将需要调用的dll动态链接库放置到system32文件里,否则就会出现找不到dll文件的错误。

(4):下面是代码部分

package com.jsld.client;
import org.xvolks.jnative.JNative;
import org.xvolks.jnative.Type;
import org.xvolks.jnative.exceptions.NativeException;
public class test {
    public static void main(String[] args) {
        try {
            //调用dll,获取结果
            JNative.setLoggingEnabled(true);
            System.load("D:\\dll.dll");     //dll文件加载路径
            JNative getFunction = new JNative("dll.dll", "function");//dll名称,调用方法
            getFunction.setRetVal(Type.STRING);         //设置返回值类型为:
            StringgetFunction.setParameter(0,"aa");     //按顺序设置方法需要的参数值
            getFunction.invoke();                  //调用方法
            String retval=getFunction.getRetVal();     //dll返回值
            System.out.println("調用结果==\n"+retval);
        } catch (IllegalAccessException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (NativeException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}


注意:1.jdk版本与dll版本对应,32位还是64位
    2.Java参数类型与dll方法参数类型是否对应


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值