(最近听到同事说了一下java调c++接口的事,于是就有点想了解下,然后就各种查资料记录下自己的简单实现过程,环境windows)
- 1.有java基础的都可以啦,新建一个类,如下(很简单~)
package
ps:这里我定义了一个类,类名和方法名自己取就好了,关键点就是用native取修饰你要调用的方法就好。
- 2.接下来就需要对这个类进行编译了。(由于要生成c++能引入头文件,所以需要将这个类编译出一个 *.h 文件。这里我在编译的时候遇到了坑,查资料说再java8后,javah 这个命令被javac -h代替了,我这里的jdk是12的,所以当时搞了半天都没弄出结果。)
2.1 找到你上面创建那个类所在的物理路径位置,进入,然后执行cmd,如下:
![26f9a11ba84dd59621f22ea82be52c70.png](https://i-blog.csdnimg.cn/blog_migrate/eeb667813413808039e774b7800cebcf.jpeg)
执行成功后,会在你类的目录中生成.h文件。如下:
![71a70cbdf1ffad80d2f57f1335dfc927.png](https://i-blog.csdnimg.cn/blog_migrate/3ebc21ae595ba0a91e522e64aa0fe7fb.jpeg)
2.2准备好.h头文件后,接下来我们就需要写c++代码去实现这个方法了(代码很基础的,不懂的可以网上查查。我这里用的是vs2013编译器写的)
2.2.1新建一个控制台应用程序,如下:
![211c7381cb8f4ce69aed6706e76b4069.png](https://i-blog.csdnimg.cn/blog_migrate/e6fa69680c0b5c6ddc187c165331226d.jpeg)
2.2.2 接下来,注意选择dll,如下:
![46d0d02c5832e53c21d4d4a38c9928c3.png](https://i-blog.csdnimg.cn/blog_migrate/189d30439aa38f357832717fa12f4876.png)
2.2.3 然后需要导入几个.h文件和之前编译出来的.h文件到工程的头文件中。列表如下:
![82535c143a440ad8c45cf44b34411f4f.png](https://i-blog.csdnimg.cn/blog_migrate/eb43375099c189d7cb2b7ed876a1eaff.png)
这里需要注意的点是:1:其它几个文件可以在你的jdk中找到。2:要将你自己生成的那个.h文件中对jin.h的进入方式改一下,改成引号方式引入,如下:
![958563189a5a07451fdf082857de179d.png](https://i-blog.csdnimg.cn/blog_migrate/298927e65282db301af2deab33c3b211.png)
2.2.4 好了,以上工作做好了后就可开始写C++代码了,如下:
#include
写好后,就可以编译生成dll文件了。(代码很简单,就是对字符串拼接后返回,只有几行。其他两个方法主要是用来对string 和jstring进行转换用的。可以网上找到。)dll文件(动态链接库)位置在 你所建项目的Debug目录下。如下:
![46f7ddd2098b6169a54d2ec2165053a5.png](https://i-blog.csdnimg.cn/blog_migrate/5f064c8aac8fd15e549eb6045c07800d.png)
- 3.接下来就是将这个dll文件添加到你的java工程依赖库中了。这个就不再细说,怎么添加其他依赖的就怎么添加这个dll就好了。
- 4.最后就是对这个native方法进行调用、测试了。由于我是在之前一个spring项目中写的,所以这里就直接在spring的test中取测试、验证了。如下:(可以直接单独写一个main方法去验证)
@Test
打印结果如下:
![7e7d490bc799ad45642f2f4a7d7fcad8.png](https://i-blog.csdnimg.cn/blog_migrate/f6ae6b8c61a3973f788dd08353bcf1a8.png)
此时,就已经完成简单的对c++接口调用啦,over...over!!!
---------------------------初步学习,共同进步-----------------------