Java + C++ 混合编程 详细教程

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

真的是快被弄死了。无语死了。

首先 你的有个C++编译器(我的是Visio Stdio 2008)。和 Java 编译器(我的是Eclipse)。

我们先在Eclipse中新建一个 Java 项目。

然后新建一个类 我取名字为 Hello.java

Java + C++ 混合编程 详细教程_第1张图片  

然后 我们打开磁盘 找到这个Java文件

Java + C++ 混合编程 详细教程_第2张图片

打开CMD命令行 使用 javac Hello.java 编译文件

Java + C++ 混合编程 详细教程_第3张图片

再在命令行中使用 javah Hello  (注意 这里不要加后缀)

image

我们会发现  在目录下多了一个 Hello.h 这个C++的头文件

Java + C++ 混合编程 详细教程_第4张图片

然后我们打开C++编译器  新建一个 项目

Java + C++ 混合编程 详细教程_第5张图片

这里项目名字叫做 Hello

Java + C++ 混合编程 详细教程_第6张图片

在 头文件 上 选择 添加 –> 新建项 

Java + C++ 混合编程 详细教程_第7张图片

选择头文件 分别新建 三个文件 jni.h  jni_md.h  Hello.h

Java + C++ 混合编程 详细教程_第8张图片Java + C++ 混合编程 详细教程_第9张图片

然后   我们打开 我们的 JDK 目录 下的 include 目录

Java + C++ 混合编程 详细教程_第10张图片

我们看见这里也有一个 jni.h 文件   我们用记事本打开  然后复制里面所有的内容 然后粘贴到 VS2008 里的我们刚才新建的 jni.h 文件里面

Java + C++ 混合编程 详细教程_第11张图片

Java + C++ 混合编程 详细教程_第12张图片

打开目录下的 win32 目录

Java + C++ 混合编程 详细教程_第13张图片

我们会发现 这里也有一个 jni_md.h 头文件 跟上一步一样 复制里面所有的内容 然后粘贴到 VS2008 里的我们刚才新建的 jni_md.h 文件里面

Java + C++ 混合编程 详细教程_第14张图片

还有  打开刚才的 Java 项目目录  找到我们刚才生成的 Hello.h 头文件 跟上一步一样 复制里面所有的内容 然后粘贴到 VS2008 里的我们刚才新建的 Hello.h 文件里面

Java + C++ 混合编程 详细教程_第15张图片Java + C++ 混合编程 详细教程_第16张图片

然后   我们在 源文件 内新建一个 CPP 文件 这里我们命名为  Hello.cpp

Java + C++ 混合编程 详细教程_第17张图片

现在我们编辑这个cpp文件 内容如下  

Java + C++ 混合编程 详细教程_第18张图片

可能大家的跟我不一样  到这里就不知道该怎么写了。 没事 我们打开Hello.h 复制这一段代码

Java + C++ 混合编程 详细教程_第19张图片

稍作修改  填入Hello.cpp 因为我们的逻辑是要C++这里返回一个字符串 所以我们返回字符串    jstring

Java + C++ 混合编程 详细教程_第20张图片

但是 这是一个空的对象  根本没有我们的内容  

这里提供一个将C++的字符串转换成Java字符串的函数

/**  
* 将C++的字符串 转换为Java的字符串Jstring    
*/    
jstring stoJstring(JNIEnv* env, const char* pat)    
{    
    jclass strClass = env->FindClass("java/lang/String");    
    jmethodID ctorID = env->GetMethodID(strClass, "", "([BLjava/lang/String;)V");    
    jbyteArray bytes = env->NewByteArray(strlen(pat));    
    env->SetByteArrayRegion(bytes, 0, strlen(pat), (jbyte*)pat);    
    jstring encoding = env->NewStringUTF("utf-8");    
    return (jstring)env->NewObject(strClass, ctorID, bytes, encoding);    
}

现在我们Hello.cpp里的代码是这样的

Java + C++ 混合编程 详细教程_第21张图片

然后 打开项目属性 附加包含目录 将你的刚才新建的文件的项目的目录地址粘贴进去

Java + C++ 混合编程 详细教程_第22张图片

Java + C++ 混合编程 详细教程_第23张图片

Java + C++ 混合编程 详细教程_第24张图片

这时候 我们C++的代码部分也算是弄好了。在项目上右键 生成 或者  重新生成

Java + C++ 混合编程 详细教程_第25张图片

控制台打印的信息 显示成功 就算是好了  如果没有成功  请返回检查一下

Java + C++ 混合编程 详细教程_第26张图片

然后打开Visio Stdio项目的目录下的Debug 文件夹 发现里面生成了一个 Hello.dll 文件

Java + C++ 混合编程 详细教程_第27张图片

到这一步  C++部分就彻底完成了,。

复制这个 Hello.dll 文件,在Eclipse中 右键项目粘贴进去

Java + C++ 混合编程 详细教程_第28张图片

我们在项目下新建一个Test来测试一下。

Java + C++ 混合编程 详细教程_第29张图片Java + C++ 混合编程 详细教程_第30张图片

控制台会打印我们刚才在C++代码中写的字符串 Hello C++

Java + C++ 混合编程 详细教程_第31张图片

到这里   也就大功告成了。

转载于:https://my.oschina.net/xiaolei123/blog/401921

你可能感兴趣的:(Java + C++ 混合编程 详细教程)