最近有做個(gè)C++ for JNI 的輔助類(lèi)庫(kù)和工具的想法,使得在JNI里可以用對(duì)象化的模式來(lái)訪問(wèn)java對(duì)象。例如java::lang::System::out->println();
這個(gè)類(lèi)庫(kù)和輔助工具除了支持對(duì)象化訪問(wèn)外,還可以帶來(lái)的方便有:
原來(lái)需要手工寫(xiě)入代碼中的大量的classname/membername和type sig可以自動(dòng)生成
原來(lái)經(jīng)常需要檢查java exception,可以利用C++的try/catch模式做Exception處理
原來(lái)手工javah生成include文件的方法可以通過(guò)輔助工具自動(dòng)生成和java class對(duì)應(yīng)的C++ 類(lèi)函數(shù)定義,開(kāi)發(fā)者只需要實(shí)現(xiàn)這個(gè)函數(shù)即可。
提供一些輔助函數(shù)、宏定義和模板使得開(kāi)發(fā)JNI更加方便。例如ansi/unicode/jstring字符串轉(zhuǎn)換、C++版本的StringBuilder、外部動(dòng)態(tài)加載jvm等。
在gnu的gcj里采用的就是類(lèi)似的模式。我看到的sun的jdk源代碼里也普遍采用了這種模式,也許將來(lái)sun會(huì)發(fā)布一個(gè)JNI的C++版本。
posted on 2009-09-17 05:51
TaoLei 閱讀(1503)
評(píng)論(2) 編輯 收藏