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

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

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

咱们先在Eclipse中新建一个 Java 项目。测试

而后新建一个类 我取名字为 Hello.javaspa

image  

而后 咱们打开磁盘 找到这个Java文件.net

image

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

image

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

image

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

image

而后咱们打开C++编译器  新建一个 项目utf-8

image

这里项目名字叫作 Hello字符串

image

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

image

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

imageimage

而后   咱们打开 咱们的 JDK 目录 下的 include 目录

image

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

image

image

打开目录下的 win32 目录

image

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

image

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

imageimage

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

image

如今咱们编辑这个cpp文件 内容以下  

image

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

image

稍做修改  填入Hello.cpp 由于咱们的逻辑是要C++这里返回一个字符串 因此咱们返回字符串    jstring

image

可是 这是一个空的对象  根本没有咱们的内容  

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

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

如今咱们Hello.cpp里的代码是这样的

image

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

image

image

image

这时候 咱们C++的代码部分也算是弄好了。在项目上右键 生成 或者&#160; 从新生成

image

控制台打印的信息 显示成功 就算是好了&#160; 若是没有成功&#160; 请返回检查一下

image

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

image

到这一步&#160; C++部分就完全完成了,。

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

image

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

imageimage

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

image

到这里&#160;&#160; 也就大功告成了。

相关文章
相关标签/搜索