Windows环境下,Java调用C++程序(C++可带返回值)

本文详细介绍了如何通过JNI将Java的功能需求转化为C++实现,并进行验证。步骤包括:1)编写Java需求清单并生成.h文件;2)创建C++工程,设置搜索路径和项目上下文,编写C++代码;3)在Java中检验C++的实现。文章还提供了处理jstring和数组类型转换的参考资料。

关于这个的流程,我是这么理解的,

(1) 先写一份Java的要求清单

(2) 然后交由C++去实现

(3) C++实现 以后再转交给java核验

下面我们先了解不带返回值是如何实现的,至于带返回值,可以参考下面这位博主的博客,他列举出了各种情况的函数返回值java调用c++带返回值_旭旭_哥的博客-优快云博客https://blog.youkuaiyun.com/luoyexuge/article/details/80556121

如果涉及到 jstring 或者 数组类型如 jdoubleArray 转换的问题,可以参考下面这篇在C++的Java Native(JNI)方法中在jdoubleArray和vector之间进行转换 - c++ - 码客 (oomake.com)https://oomake.com/question/1895143


目录

一、生成一份要求清单

二、将清单交给C++去实现

1、新建一个C++工程

2、添加搜索路径

3、设置项目上下文(很重要)

4、编写项目文件

三、java检验C++实现的内容


一、生成一份要求清单

首先我们用java写一份“要求清单”,即创建一个java类

写好以后,现在我们要把清单转变成C++认识的模样,即.h文件

找到CallCProgram.java在文件夹中的位置

 并在上面路径的开头输入 cmd,这样的话,进入命令行以后就可以直接跳转到这个路径了

 在命令行中输入 javac -h ./ CallCProgram.java    ( ./ 和 CallCProgram.java之间有一个空格)

注意: 使用的java只要是一个普通类就可以,不需要加任何注解,不然反倒会出现一些奇怪的错误

二、将清单交给C++去实现

1、新建一个C++工程

由于java要求我们生成的库是Dll2.dll,所以我们新建的工程名就叫 Dll2

2、添加搜索路径

连接java和C++之间的关键就是jni.h文件,jni.h文件又需要用到jni_md.h文件,这两个文件在jdk的安装路径下,如果不知道在哪,可以使用everything查找

 jni_md.h在上图的win32文件中

 我们把这两个文件所在的路径添加到项目包含的目录下

右键点击项目,属性——VC++目录——包含目录,加入路径

 D:\Download\JDK\sdk_install\include\win32

 D:\Download\JDK\sdk_install\include

3、设置项目上下文(很重要)

小编使用的IDEA是64位平台,VS生成DLL库却是32位的,所以为了避免平台不兼容,这里最设置一下

点击配置管理器

 将项目上下文改为64位的

4、编写项目文件

新建两个文件分别是 PrintWord.h 和 PrintWord.cpp,将第一步生成的.h文件放到 PrintWord.cpp同级目录下

 ========================PrintWord.h ========================

需要注意的是,函数声明已经由java帮我们制定了,我们打开第一步生成的 .h 文件

 所以我们直接拿来使用即可

 ========================PrintWord.cpp ========================

pch.h文件是项目工程被创建的时候,就已经存在了

 接下来右键一键生成即可

三、java检验C++实现的内容

我们在 项目中的的debug文件下找到 Dll2.dll文件,我们把这个文件加入到IDEA安装目录下的bin文件中,小编这里的路径是 D:\Download\IDEA\IDEA2022\bin

 然后回到IDEA开始运行最开始的程序

注意:如果在生成动态库的过程中,引入了其他第三方库,需要将其他第三方库的dll文件也加入到IDEA安装路径下的bin目录中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值