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函数
}
}

此时说明Java调用C++代码成功了!!!
imagej 开发
参考:https://blog.youkuaiyun.com/qq_41655891/article/details/118223721?spm=1001.2014.3001.5501
本文详细介绍了如何在Java(使用NetBeans11.3)中调用C++函数,通过JNI技术创建动态链接库.dll,并在Java代码中加载该库,实现跨语言的函数调用。首先创建Java工程,定义native函数,然后使用javah生成C++头文件。接着在VS2019中编写C++代码实现函数并编译为.dll。最后在Java中加载.dll并调用函数,成功完成混合编程。
3405

被折叠的 条评论
为什么被折叠?



