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

相關文章
相關標籤/搜索