imagej插件开发小结

本文详细介绍了如何在Java(使用NetBeans11.3)中调用C++函数,通过JNI技术创建动态链接库.dll,并在Java代码中加载该库,实现跨语言的函数调用。首先创建Java工程,定义native函数,然后使用javah生成C++头文件。接着在VS2019中编写C++代码实现函数并编译为.dll。最后在Java中加载.dll并调用函数,成功完成混合编程。

JAVA调用C++函数,然后生成.jar文件

JAVA与C++混合编程

JAVA(NetBeans11.3)

首先创建一个JAVA工程文件,选择Java Class Library 

点击Next-------Project Name:Test_01 (这里带了下划线,imagej 插件的要求,这里加了后期不用做修改),点击Finish

打开Test_01工程文件,选择Source Package----default package(右键新建一个Java Class):

点击Finish。在刚才生成.java文件中加入以下代码:一个native 函数(与C++代码通信,调用C++代码)和main方法,然后点击保存(不点保存生成的.h会缺少通信的函数)

public class Test_01 {
    public native void Filter(int r);
    public static void main(String[] args) {
    }   
}

生成C++头文件

Win+R,输入cmd;

进入Test_01项目所在文件,分别输入javac Test_01.java(生成.class文件)和 javah -jni Test_01(生成C++头文件)

C++(VS 2019)

在你需要被调用的工程文件中新建一个Test_01.h的头文件,将Java生成的头文件代码复制过来,保存。

此时第一行代码会报错,这是因为你没有添加两个头文件

找到JAVA的安装目录 我这是 C:\Program Files\Java\jdk1.8.0_251\include,可以找到jni.h头文件

C:\Program Files\Java\jdk1.8.0_251\include\win32,可以找到jni_md.h头文件

如果添加后还报错,参考:https://blog.youkuaiyun.com/lch551218/article/details/100100894

最后来到.cpp文件实现Test_01.h中的函数(将main函数换成此函数),添加头文件。

工程名右键 -- 属性,确认平台X64 ,配置类型改为动态库.dll,应用--确认

菜单栏  生成---重新生成解决方案

此时生成的.dll文件可以在C++项目所在文件找到

Java调用C++函数

回到java工程文件,添加以下代码,点击保存(不点保存运行会报错)

public class Test_01 {
    public native void Filter(int r);
    public static void main(String[] args) {
        System.loadLibrary("Post-processing");//调用前面生成的.dll文件
        Test_01 Wu = new Test_01();
        Wu.Filter(100);//调用native函数
    }   
}

运行 测试是否成功调用。(如果报错说没找到.dll文件路径,参考:https://blog.youkuaiyun.com/wwj_748/article/details/28136061?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162571326716780261921680%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=162571326716780261921680&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_v2~rank_v29-2-28136061.pc_search_result_cache&utm_term=Java+JNI%E8%B0%83%E7%94%A8C%2FC%2B%2B%E4%BB%A3%E7%A0%81%E7%BC%96%E7%A8%8B&spm=1018.2226.3001.4187

此时说明Java调用C++代码成功了!!!

imagej 开发

参考:https://blog.youkuaiyun.com/qq_41655891/article/details/118223721?spm=1001.2014.3001.5501

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值