java 调用.dll组件

这几天同事调用.dll文件出现各种问题, 在下闲来无事,也来玩玩,碰到的问题做个记录,指不定哪天就能用上,休洛洛洛~

java调用.dll组件几种方式(JNI&JNATIVE&JNA)


JNI

JNATIVE
1.下载JNATIVE jar包 根据系统选择.dll/.so 文件,将其中的JNativeCpp.dll拷贝到system32文件夹中,libJNativeCpp.so是linux平台使用的(以下只描述.dll .os同理)
2.将jnative jar和 包导入现有工程,或copy至jdk/jre/lib/ext下

3.编写测试代码

package main.com.java;

import org.xvolks.jnative.JNative;
import org.xvolks.jnative.Type;

/**
 * @Auther: jyb
 * @Date: 2018/8/31 14:31
 * @Description:
 */
public class JnativeTestDll {


    public static void main(String[] args) {
        //加载.dll文件
//        System.loadLibrary("hellodll");
        JNative getUrl;
        try {
            //调用dll库,第一个参数为dll名字  第二个参数为dll库中函数的名字
//           getUrl = new JNative("DolphinM2RobotNetCtrl", "_NET_ROBOT_PTZLightControl@4");
             getUrl = new JNative("hellodll", "?Add@MyMathFuncs@MathFuncs@@QAENNN@Z");
            double f1 = 2.3;
            double f2 = 3.7;
            //定义函数返回值类型
                getUrl.setRetVal(Type.DOUBLE);
                getUrl.setParameter(0, Type.DOUBLE, "2.3");
                getUrl.setParameter(1, Type.DOUBLE, "3.7");
            //执行所调用的函数
                 getUrl.invoke();

            //获取所调用的函数的返回值
            System.out.print( getUrl.getRetVal());

        } catch (Exception e) {

            e.printStackTrace();
        }

    }


}
4. 运行测试  

这里写图片描述

问题总结:

  • org.xvolks.jnative.exceptions.NativeException: Function xxx not found
    调用的.dll函数名称是经过编译后的优化名称,这也是与JNI调用的函数名称不同之处,
    如果遇以上错误则需要考虑该问题,可使用eXeScope工具打开.dll文件查看导出的函数名称是否与调用的一致;

  • java.lang.UnsatisfiedLinkError: Expecting an absolute path of the library
    .dll访问环境有问题, 检查.dll是否放入系统环境变量中 ,如jdk/bin目录下

  • java.lang.UnsatisfiedLinkError: TestDll.NET_ROBOT_PTZLightControl(Ljava/lang/Short;)I
    请求方法名称不对应

  • 不是32位应用程序
    1.检查.dll是32还是64位
    2.jdk版本为32/64位
    3.保持 jdk版本与.dll版本一致

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值