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

本文档详细介绍了如何在Java环境中通过JNI调用C++代码,并实现C++向Java返回字符串的过程。从创建Java项目开始,一步步指导如何生成C++头文件、编写对应的C++代码,最终完成项目的编译和测试。

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

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

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

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

image  

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

image

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

image

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

image

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

image

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

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; 也就大功告成了。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值