博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA调用C++ dll库
阅读量:6687 次
发布时间:2019-06-25

本文共 1202 字,大约阅读时间需要 4 分钟。

hot3.png

JNI方式:(不建议使用)

1.java中的native类,编写java测试类;

2.使用javac -test.java 生成 test.class文件;

   上层目录中   javah -classpath -jni xxx.test

   生成 xxx_test.h

3..h文件导入 vs中,.cpp中实现具体类,并生成dll文件

4.java项目中添加dll文件,调用接口;

 

 

JNA方式:(简单方便,优先使用)

1.编写.h文件,如下:test.h

extern "C" _declspec(dllexport) int add(int first, int second);

这里值得注意的地方是必须写(extern "c"的声明,不然到时候使用java的jna是不可能匹配到这个方法的,很明显会抛出异常java.lang.UnsatisfiedLinkError: Error looking up function 'add':这个文件相当于我们的java中的interface,你可以这样理解

2.编写.cpp文件,如下test.cpp

#include "test.h"  

int add(int a, int b){
    return a + b;
}

3.生成对应的dll文件:test.dll

4.继承library类,Native.loadLibrary()加载dll文件,如下:

package demo;

import com.sun.jna.Library;

import com.sun.jna.Native;

public interface Add extends Library {

    public final Add add = (Add)Native.loadLibrary("Test", Add.class);   //Test放在同目录下,如果是一个插件,不如插件plugin文件夹,下面是Test.dll,可写成plugin/Test;java项目中默认是放在bin目录下
    int add(int a, int b); 
}

5.测试

package demo;

public class TestCase {

   
    public static void main(String[] args) { 
          System.out.println(Add.add.add(1, 2));      
    }
}

注:1.java报错未读取到dll文件,一般是Native.loadLibrary("Test", Add.class);加载的路径有问题;

       2.java报错未加载到function,一般是调用dll文件中的参数有问题,或者方法名有问题;

       3.java报错 %1不是应用程序,一般是jdk位数不匹配;

转载于:https://my.oschina.net/courtzjl/blog/1608054

你可能感兴趣的文章
我的友情链接
查看>>
如何使用网络库实现应用级消息收发
查看>>
Single Area OSPF
查看>>
rhel6之yum
查看>>
selenium+ant+testng测试框架简单介绍
查看>>
自己写的DBUtil数据库连接工具类
查看>>
登录多实例MySQL失败,修改密码临时解决,原因不明
查看>>
Linux下安装oracle数据库步骤
查看>>
yum 不小心删除后安装
查看>>
vim 使用
查看>>
为敏感信息设置安全屏障
查看>>
mysql fabric安装使用测试
查看>>
java 对 mongoDB 分组统计操作 以及一些常用操作
查看>>
当你扛不住的时候就读读
查看>>
解决安装rrdtool遇到的一个问题
查看>>
linux启动过程
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
xmlUtil 解析 创建
查看>>
我的友情链接
查看>>