开发环境:
一、IDEA 2019.1.3
二、VS2010
三、JDK 1.8 X86
开发步骤:
一、编写Java代码:
package aa.bb.cc;
public class HelloCPlus {
public static void main(String[] args){
HelloCPlus helloCPlus = new HelloCPlus();
int c = helloCPlus.HelloJava(3,5);
System.out.println("这是通过调用c++代码计算3+5所得的值:"+ c);
}
public native int HelloJava(int a, int b);
}
二、生成.h文件
使用“WIN+R”命令输入CMD打开Windows的命令行程序,进入到项目的类目录中,
使用命令 `javah -classpath F:\JavaUseCPlus\src -jni aa.bb.cc.HelloCPlus`
即可生成HelloCPlus的.h文件(注:生成的.h文件将会存放在项目的类目录中)
生成的.h文件
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class aa_bb_cc_HelloCPlus */
#ifndef _Included_aa_bb_cc_HelloCPlus
#define _Included_aa_bb_cc_HelloCPlus
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: aa_bb_cc_HelloCPlus
* Method: HelloJava
* Signature: (II)I
*/
JNIEXPORT jint JNICALL Java_aa_bb_cc_HelloCPlus_HelloJava
(JNIEnv *, jobject, jint a, jint b);/* a和b两个形参需要自行添加,生成的.h文件没有两个形参名*/
#ifdef __cplusplus
}
#endif
#endif
三、编写C++代码
1、创建项目
其中 aa_bb_cc_HelloCPlus.h是之前我们使用命令行程序生成的.h文件,jni.h和jni_md.h存在于JDK的安装目录中
在创建文件后,需要将aa_bb_cc_HelloCPlus.h文件放到VS2010的安装目录中,否则项目将不能读取该头文件
文件创建成功!
2、编写C++代码
添加.cpp文件
编写C++代码
#include "aa_bb_cc_HelloCPlus.h"
#include <iostream>
using namespace std;
JNIEXPORT jint JNICALL Java_aa_bb_cc_HelloCPlus_HelloJava
(JNIEnv *, jobject, jint a, jint b)
{
return a+b;
}
生成文件
生成成功后,在项目目录中得到我们需要的.dll文件
四、再次编写Java代码
1、在编写代码之前,我们需要引入.dll文件(如果JDK是64位的需要切换为32位的JDK)
在VM options中添加.dll文件的路径,“-Djava.library.path=F:\HelloJava\Debug”
编写代码
package aa.bb.cc;
public class HelloCPlus {
//这是在之前代码的基础之上添加的代码,目的是添加.dll文件
static {
System.loadLibrary("HelloJava");
}
public static void main(String[] args){
HelloCPlus helloCPlus = new HelloCPlus();
int c = helloCPlus.HelloJava(3,5);
System.out.println("这是通过调用c++代码计算3+5所得的值:"+ c);
}
public native int HelloJava(int a, int b);
}
点击运行
获得准确的值,调用完成!!!