最近应项目的需求,需要通过java调用dll动态库,于是找了一些资料,在此记录一下实现过程,包括出现的错误处理。

写一个包含static System.loadLibrary()和native修饰过的方法的类,如下:

package com.android.test;

public class TestNative {

static {

System.loadLibrary("TestNative");

}

private native int add(int x,int y);

/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

//打印出添加到windows系统中的环境变量,也可以通过右击我的电脑,属性,边境变量中查看

System.out.println(System.getProperty("java.library.path"));

TestNative dllTest = new TestNative();

int r = dllTest.add(20, 30);

System.out.println("result="+r);

}

}

在命令行中通过javac命令生成TestNavive.class文件,操作过程如下:

0_130743888166QV.gif

通过javah生成com_android_test_TestNative.h头文件,操作如下:

0_1307439098Pp33.gif

如果上面的操作中出现javac,javah命令找不到的话,请在环境变量中把java的安装目录设置正确。

在运行javah命令的时候,set classpath=当前工程的路径,否则会出现异常

通过c的IDE生成.dll文件,然后放置到系统环境变量中。运行TestNative.java文件,得到如下的结果:

0_13074395235o17.gif

如果出现java.lang.UnsatisfiedLinkError: Can’t find dependent libraries的异常,请参考这篇文章,

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐