背景
由于之前一直没有接触过用Java调用C++,目前正在考虑用C++写主要的算法,然后用Java来调用。通过查找资料,发现要嘛用通信的方式,要嘛就使用JNI,也就是Java Native Interface的简称,中文是“Java本地调用”。通常在Java程序中的函数可以调用Native语言写的函数,Native一般指的是C/C++编写的函数。
Native程序中的函数可以调用Java层的函数,也就是说在C/C++程序中可以调用Java的函数。使用JNI的目的是为了屏蔽不同操作系统平台的差异性,通过Java语言来调用Native语言的功能模块。
本次博主将通过详细截图的形式来演示如何使用Java调用C++dll。按照截图完成,保证可以用。
附上相关的两个项目源码
http://download.csdn.net/detail/buptzhengchaojie/9553327
http://download.csdn.net/detail/buptzhengchaojie/9553328
另外还有一篇关于Java webservice里调用依赖其他dll 的自定义dll,如果需要,这里有传送门:
Java webservice 调用自定义dll(有其他依赖)方法全解,无需设置环境变量
一、新建Java工程,在Java类中声明一个native的方法
新建Java项目
在新建的项目中创建packet(包),并且在包下创建一个Class(类)。
接下来,在该类中添加如下代码:
public class JavaInvodeCPlus {
//声明为native,表明是有外部来实现的
public native String returnHelloWorldToUpcase(String string);
public native void sayHelloWolrd();
}
二、使用Javah命令生成native方法的声明的C/C++头文件
进入该项目所在的位置,博主这里的位置是D:\00Coding\my-space\JavaInvokeCPlus
接着进入bin目录下,找到该packet下存在一个.class文件
我们需要用javah命令来生成头文件。回到bin目录下,因为这里涉及到包名,所以必须在包目录下来。按住shift键,同时在文件夹内空白处右击,可以进入命令行。当然,你也可以一步步进入到该路径下。
这里需要注意的是,文件的末尾不加上.class后缀。然后我们可以看到在bin目录下多了一个.h头文件。
打开我们可以看到如下代码:
/* DO NOT EDIT THIS FILE - it is machine ge