2019独角兽企业重金招聘Python工程师标准>>>
真的是快被弄死了。无语死了。
首先 你的有个C++编译器(我的是Visio Stdio 2008)。和 Java 编译器(我的是Eclipse)。
我们先在Eclipse中新建一个 Java 项目。
然后新建一个类 我取名字为 Hello.java
然后 我们打开磁盘 找到这个Java文件
打开CMD命令行 使用 javac Hello.java 编译文件
再在命令行中使用 javah Hello (注意 这里不要加后缀)
我们会发现 在目录下多了一个 Hello.h 这个C++的头文件
然后我们打开C++编译器 新建一个 项目
这里项目名字叫做 Hello
在 头文件 上 选择 添加 –> 新建项
选择头文件 分别新建 三个文件 jni.h jni_md.h Hello.h
然后 我们打开 我们的 JDK 目录 下的 include 目录
我们看见这里也有一个 jni.h 文件 我们用记事本打开 然后复制里面所有的内容 然后粘贴到 VS2008 里的我们刚才新建的 jni.h 文件里面
打开目录下的 win32 目录
我们会发现 这里也有一个 jni_md.h 头文件 跟上一步一样 复制里面所有的内容 然后粘贴到 VS2008 里的我们刚才新建的 jni_md.h 文件里面
还有 打开刚才的 Java 项目目录 找到我们刚才生成的 Hello.h 头文件 跟上一步一样 复制里面所有的内容 然后粘贴到 VS2008 里的我们刚才新建的 Hello.h 文件里面
然后 我们在 源文件 内新建一个 CPP 文件 这里我们命名为 Hello.cpp
现在我们编辑这个cpp文件 内容如下
可能大家的跟我不一样 到这里就不知道该怎么写了。 没事 我们打开Hello.h 复制这一段代码
稍作修改 填入Hello.cpp 因为我们的逻辑是要C++这里返回一个字符串 所以我们返回字符串 jstring
但是 这是一个空的对象 根本没有我们的内容
这里提供一个将C++的字符串转换成Java字符串的函数
/**
* 将C++的字符串 转换为Java的字符串Jstring
*/
jstring stoJstring(JNIEnv* env, const char* pat)
{
jclass strClass = env->FindClass("java/lang/String");
jmethodID ctorID = env->GetMethodID(strClass, "
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里的代码是这样的
然后 打开项目属性 附加包含目录 将你的刚才新建的文件的项目的目录地址粘贴进去
这时候 我们C++的代码部分也算是弄好了。在项目上右键 生成 或者 重新生成
控制台打印的信息 显示成功 就算是好了 如果没有成功 请返回检查一下
然后打开Visio Stdio项目的目录下的Debug 文件夹 发现里面生成了一个 Hello.dll 文件
到这一步 C++部分就彻底完成了,。
复制这个 Hello.dll 文件,在Eclipse中 右键项目粘贴进去
我们在项目下新建一个Test来测试一下。
控制台会打印我们刚才在C++代码中写的字符串 Hello C++
到这里 也就大功告成了。