JAVA调用dll编程,有不用要积分的JNA.jar报下载地址哦

    最近在做一个和dll库相关的项目,dll的简介这儿就不说了,主要作用就是windows系统下的一个库,做过Android的对so不陌生吧。那么dll 就和Android下面的so库一个道理。

好吧,话不多说。调用dll其实就是跨语言编程,通过java代码去调用其他语言的代码(如:c,c++),调用方式有多种,如原生的JNI,JNA框架等。本文只介说JNA框架方式调用dll库,原因嘛:主要是 只有这个我才是真的实践成功了的,总不能自己没成功的方法介绍给被人啊。

好,重点来了,第一步下载两个jar包:

1.下载地址: 

https://maven.java.net/content/repositories/releases/net/java/dev/jna/jna/4.0.0/jna-4.0.0.jar

https://maven.java.net/content/repositories/releases/net/java/dev/jna/jna-platform/4.0.0/jna-platform-4.0.0.jar

晚上很多介绍JNA的文章,但是jar包都需要积分,哎,现年头程序员这么穷,搞积分不好搞,还好被我发现了免费的jar包下载地址。亲测好用

第二步:

将jar包导入到项目中,看你用idea或者eclipse开发,你把项目建起来,helloworld 整出来,就可以开始了。

第三步:把你需要引用的dll文件放在项目下面(如果你要使用绝对路径也可以),反正就是把dll文件的路径通过代码告诉我们的程序,因为我们要通过loadLibrary 这个方法将我们需要用到的dll文件放到我们项目中来。

第四步:定义我们需要调用的dll文件里面的方法。

总结上面的几步很简单,一切都是那么的顺其自然,首先第一步就是准备jar包,第二步就是准备dll文件,第三就是把dll文件加载到项目中,第四步就是调用dll里面的接口方法,也就是我们的最终目的。

好,接下来给大家看看代码怎么写,

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

public class Main {


    public interface CLibrary extends Library {
        CLibrary INSTANCE = (CLibrary)
                Native.loadLibrary("LibSupervisor",
                        CLibrary.class);

        IntByReference init();

    }

    public static void main(String[] args) {
        try {
            System.out.println("当前的" + CLibrary.INSTANCE.init());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

就很简单哈,先把上面的代码copy到你的项目里面,然后把dll文件的名称换成你的,然后把 init 方法换成你的,然后再把 init方法的返回值换成你需要的,然后点击允许,那么你就成功了 当然 你可能会出现很多问题,比如,加载不到这个dll文件,那么你就看你的名称和路径写对了没得。

又比如 可能会遇到 这个dll文件引用的其他的dll文件找不到,那么你就需要把这个dll需要引用到的全部的dll 文件都放到项目里面去,不需要通过loadLibary方法,但是至少要和需要调用的dll在同一个目录下,

又比如:可能会出现没有你需要调用的那个方法,那么就看你到底有没有那个方法了啊  或者 名称写对没有啊

又比如: 出现一些Exception in thread "main" java.lang.Error: Invalid memory access 这种异常,很抱歉 我遇到了这个问题 现在还没解决,就要写dll文件的和你一起排查看看问题在那 了。

好的 就说这么多了  有需要源码的 可以留言发给大家参考 就不上传资源坑大家积分看

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页