Java與C++混合編程(2)

C++調用Java類方法

這裏演示String作爲參數的調用返回的方法,其它的類型的方法調用也類似。

創建一個靜態聲明的Java方法

java

這個方法將會接受一個C++的傳入的字符參數,並返回Java的字符類,讓C++函數輸出內容。代碼位於%SRC%/cpp-java/WinFile.java

編譯該文件後生成是一個java字節碼的文件,它必須要運在JVM上,C++要執這些Java字節碼,必須要運行JVM,運行JVM的代碼位於文件%SRC%/cpp-java/WinFile.cpp中,如下圖所示

java

通過JNI_CreateJavaJVM這個函數,C++則會運行JVM,注意,生成的WinFile.exe這個文件提示需要jvm.dll,但是千萬不要將jvm.dll從jre這個目錄拷貝到WinFile.exe這個目錄,因爲jvm能夠正常運行,必須依賴jre的java庫和其它的動態庫,雖然從dependency看不出jvm.dll依賴jre中的其它庫和文件。如果把jvm.dll抽離出來與WinFile.exe位於同一目錄,雖然能夠運行,但JNI_CreateJavaJVM調用永遠失敗的。解決方法,就是將jvm.dll這個動態庫加入的搜索路徑中,如上面的批處理文件所示。

java

成功建立Java虛擬機後,就需要動態獲得類名,並通過類名和函數簽名獲得Java的方法,獲得函數簽名的方法是運行如下命令。

Java -s -p WinFile

則輸出了我們在Java文件中定義的函數的簽名,

java

剩下的事情就是要負責將字符的參數進行編碼調用,如下圖標註出值得注意的地方

java

參數的轉換過程是爲char*轉爲UTF8編碼再轉變成爲jstring偉入java方法,java方法的返回值也應該是先轉成jstring類型,再轉爲char*類型再轉爲GB2312。運行程序,輸出結果如下

java

總結

混合語言編程要注意的是編碼傳輸,語言運行環境的因素。例如要在C++中構造Java的運行環境。混合語言編程有困難,但也很有趣,兩種語言的優點都可以得到,不是很好的事情嗎?

原文鏈接:http://news.bangkaow.com/news/20110214/118369.html

發佈了1 篇原創文章 · 獲贊 5 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章