Java+C++混合编程详细教程
真的是快被弄死了。⽆语死了。
⾸先 你的有个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, "<init>", "([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⾥的代码是这样的
然后 打开项⽬属性 附加包含⽬录 将你的刚才新建的⽂件的项⽬的⽬录地址粘贴进去
这时候 我们C++的代码部分也算是弄好了。在项⽬上右键 ⽣成 或者  重新⽣成
eclipse怎么打开已有的java文件控制台打印的信息 显⽰成功 就算是好了  如果没有成功  请返回检查⼀下
然后打开Visio Stdio项⽬的⽬录下的Debug ⽂件夹 发现⾥⾯⽣成了⼀个 Hello.dll ⽂件
到这⼀步  C++部分就彻底完成了,。
复制这个 Hello.dll ⽂件,在Eclipse中 右键项⽬粘贴进去
我们在项⽬下新建⼀个Test来测试⼀下。
控制台会打印我们刚才在C++代码中写的字符串 Hello C++
到这⾥   也就⼤功告成了。