聚合 管理  

          Blog Stats

          News

          我使用新博客啦:
          http://www.linjunhai.com/
          大家到我的新博客上看看吧!

          隨筆分類(28)

          文章分類(4)

          隨筆檔案(53)

          文章檔案(4)

          相冊

          相關鏈接


          林俊海的博客

          超級大菜鳥,每天要自強!

          現(xiàn)在難得來看一下自己的博客,今天好不容易找了個代理,順便再繼續(xù)之前的話題,就是 JAVA 與 Delphi 的交互了.

          在上一篇中,我們說了如何用 Java 調(diào)用 Delphi 程序的一個方法,今天我們再深入一點,就是怎樣提交參數(shù)個 Delphi 的方法,以動態(tài)的控制 Delphi 的方法.
          下面,我們切入正題.

          首先,我們定義如下的 Java 類:

          //----------------------------------------------------------------------------------------------------------
          package alvinJNI;

          class HelloWorld {
          ??????? static {
          ??????????????? System.loadLibrary("DelphiAction");
          ??????? }

          ??????? public native void printText(String str);

          ??????? public static void main(String[] args) {
          ??????????????? HelloWorld hw = new HelloWorld();
          ??????????????? hw.printText("您好!看到效果了吧。");
          ??????? }

          }
          //----------------------------------------------------------------------------------------------------------

          我們再像上次一樣在 Delphi 中建立 DLL 工程,寫下面的代碼(有注釋):

          //----------------------------------------------------------------------------------------------------------
          library DelphiAction;

          uses
          ? JNI;

          //這一次我們要寫的這個方法因為要接收一個 Java 傳過來的參數(shù),所以我們來說一下這個參數(shù)列表的問題
          //參數(shù)列表中的第一個參數(shù) PEnv 類型為 PJNIEnv, 它是 JNI.pas中定義的類型,我們好多工作要通過它來實現(xiàn),可以把它看成是一個幫你的程序與 Java 溝通的橋梁.
          //參數(shù)列表中的第一個參數(shù) obj 類型為 JObject.前面這兩個參數(shù)是固定的,這第二個參數(shù)暫時我們還不會用到.
          //今天,我們還要給這個方法多加一個參數(shù),用來接受 Java 傳過來的參數(shù). str: JString

          procedure Java_alvinJNI_HelloWorld_printText(PEnv: PJNIEnv; Obj: JObject; str: JString); stdcall;
          //這回我們需要用到一個 TJNIEnv 對象,我們來聲明
          var
          ? JVM: TJNIEnv;
          ? tmpStr: String;

          begin
          ? //實例化 JVM, 這個對象可以看成是 Java 的虛擬機.(自己的理解)
          ? JVM := TJNIEnv.Create(PEnv);

          ? //參數(shù)提交過來的字符串,實際上是一個 JString 對象,我們在這里要用 JVM 來轉(zhuǎn)化它.
          ? //我們調(diào)用 JVM 的 UnicodeJStringToString 函數(shù)就可以實現(xiàn) JString 到 String 的轉(zhuǎn)化了.
          ? tmpStr := JVM.UnicodeJStringToString(str);

          ? Writeln(tmpStr);

          ? //我們使用完 JVM 后,要將其釋放.
          ? JVM.Free;
          end;

          exports
          ??????? Java_alvinJNI_HelloWorld_printText; //為函數(shù)做引出聲明,這樣才能真正的被調(diào)用到
          end.
          //----------------------------------------------------------------------------------------------------------

          我們現(xiàn)在就可以生成 DelphiAction.dll 將其放在 Java 工程目錄下, 再執(zhí)行 alvinJNI.HelloWorld 看看效果了.

          好了,我們今天主要就是實現(xiàn)了一下,如何在 Java 調(diào)用 Delphi 的方法時,給其提交一個參數(shù).
          是不是很爽?

          今天就先說到這里.接下來,我會盡快的再貼上一些文章

          posted on 2006-12-01 21:30 林俊海 閱讀(429) 評論(0)  編輯  收藏 所屬分類: JAVA天地
          主站蜘蛛池模板: 泗水县| 中方县| 绥江县| 开封市| 双峰县| 河北省| 淮阳县| 清远市| 徐水县| 虎林市| 丽水市| 青川县| 丰都县| 黄大仙区| 五大连池市| 孝义市| 固安县| 皮山县| 左贡县| 鱼台县| 泗阳县| 万全县| 罗定市| 封丘县| 乌兰浩特市| 襄汾县| 邛崃市| 本溪市| 岳阳县| 化隆| 揭西县| 新和县| 云霄县| 茂名市| 新绛县| 睢宁县| 长丰县| 太湖县| 怀远县| 广饶县| 广昌县|