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 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.