C++調用Java又一方法
來源:互聯網
上載者:User
C++
調用
java C++和java可以算是當今最流行的程式設計語言了。他們之間有許許多多的話題;這裡我就來說一說C++調用java,其實這“說一說”有點說大了。前一陣子,趁有機會瞭解了JNI的一些東西,並按我的方法對JNI做了些封裝,我就可以在C++ 中調用一些java寫的功能了!要運行java還是要在JVM(java虛擬機器)裡運行,還是需要有jre; 所以要C++中調用java是有前提的;一.要安裝好JDK,下載最新的JDK,設定好環境變數;二.在path環境變數中添加%JAVA_HOME%/jre/bin/client; %JAVA_HOME%/jre/bin;(添加必要的dll)通過以上兩步就可以了;忘了最關鍵的,還要有封裝了JNI功能的C++代碼,下載封裝的C++代碼:地址
http://www.programsalon.com/downloads77/sourcecode/windows/other/detail295159.html或者:
到yahoo網站的郵箱
xwshare@yahoo.com.cn
,
使用者:xwshare ,密碼 alluser ,能找到
C++調用Java的代碼和例子
的郵件(別刪除)
若沒有發資訊到我的郵箱 xiao78xy@tom.com 如能下載到,那我們就繼續吧!下載後解壓,
注意:
說明一些:header
中是.h
檔案source
中是.cpp
檔案,lib
中是.jar
和.lib
檔案,tool
中是一個很有用的工具,sample
是幾個如何調用的簡單的例子!
其他的是一些非必要的東西;
可以直接用VC
開啟JNI_CPP.dsw
,並設定vc
包含檔案(JNI_CPP)
和lib(JNI_CPP/lib)
的路徑!
首先,前面說過了要運行java還是要在JVM(java虛擬機器)裡運行,那麼首先就要吧JVM載入我們的C++編寫的程式的程式環境,也可以說是吧jvm嵌入到程式中,所謂的jvm就是jvm.dll(估計也是用C/C++編寫的)中,既然是dll就和C++不遠了,不是嗎。好在安裝JDK的時候,一切已經存在了,就是include和lib檔案,有.h和.lib檔案,這就很清楚了,再查看一些有關的資料就更容易了。不多說了,在封裝的代碼中有幾個個API交代一下:boolJNI_CPP_StartVM(long_Ver);就是載入一個JVM的,參數是JDK中預定義的JDK的版本;預設是JNI_VERSION_1_4可跟據安裝的JDK 來設定這個參數。這個函數並不是最現調用的函數,在此之前必須把我們要調用的java模組(一般都是.jar檔案)告訴我們要建立的JVM ,調用的方法就是:boolJNI_CPP_LoadJarLibrary(constchar* fileName);可以多次調用這個函數,fileName參數可以是絕對路徑,也可以是PATH變數中的檔案路徑調用,必須在調用 JNI_CPP_StartVM()前將所要用的java都裝載完!;還有其他幾個函數我列一下,不多一共5個函數:voidJNI_CPP_EndVM(); JNI_Env* JNI_CPP_StartSubEnv();void JNI_CPP_EndSubEnv(); JNI_CPP_EndVM()很好理解,就是要卸載JVM時調用,最好要和JNI_CPP_StartVM()在同一個域中;JNI_CPP_StartSubEnv()和JNI_CPP_EndSubEnv()也是於對必須在同一個域中調用的函數,確切的說是同一個線程中調用的函數;java的一個運行環境只能對應一個線程,所以在不同的線程中調用java模組的功能就要首先調用JNI_CPP_StartSubEnv,結束是再調用JNI_CPP_EndSubEnv()回收一些資源!在個在例子ThreadTest中有調用!以上的這些API已經介紹了,還不得不說一個工具,在tool目錄的cpp_build中有兩個exe,JavaToCpp.exe和JavaToCppFace.exe,同目錄的還有DumpJar.jar,你只要運行JavaToCppFace.exe就可以了!可以將java類產生能調用的C++類,JavaToCppFace.exe每一個按鈕都有ToolTip,使用簡單!
下面舉個例子:在tool目錄中有個工程,正是JavaToCppFace1,首先有個JarDumpClass.java,可以看到所有需要的功能,並將其轉換成jar檔案(DumpJar.jar)2,開啟JavaToCppFace.exe,add jar按鈕(DumpJar.jar),-》just this按鈕(會看到到JavaJar.JarDumpClass)-》add class (選中一個class) -》build(最後一步)3,在DumpJar.jar的目錄中會有JAVA_JarDumpClass.cpp、JAVA_JarDumpClass.h和 JarDumpClass.javap檔案產生,JarDumpClass.javap檔案是程式調用javap.exe產生的檔案,.h和.cpp是根據這個檔案產生了。4,將產生的.h和.cpp放到專門的JNI_CPP/javaClass檔案中,在JavaToCppFace工程中包含這個兩個檔案就是了;5,下面就可以看一下JavaToCppFace的代碼就可以知道如何調用! 最後,通過以上的步驟一些簡單的java類是可以輕鬆的在C++中使用的。還有,這個封裝還有很多不足的地方,比如沒有加入java的異常處理; 就這樣,有什麼問題可以聯絡我 xiao78xy@tom.com By XiaoWei Date:20060508 QQ:286834426