关于这个的流程,我是这么理解的,
(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
目录
一、生成一份要求清单
首先我们用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目录中。
本文详细介绍了如何通过JNI将Java的功能需求转化为C++实现,并进行验证。步骤包括:1)编写Java需求清单并生成.h文件;2)创建C++工程,设置搜索路径和项目上下文,编写C++代码;3)在Java中检验C++的实现。文章还提供了处理jstring和数组类型转换的参考资料。
359

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



