聚合 管理  

          Blog Stats

          News

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

          隨筆分類(28)

          文章分類(4)

          隨筆檔案(53)

          文章檔案(4)

          相冊

          相關鏈接


          林俊海的博客

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

          ?

          在上一篇中,我們說了如何用 Java 調用 Delphi 程序的一個方法并傳遞給其一個字符串參數,現在我們再來看一下如果傳遞的參數是其它基本類型,又要怎么做.


          首先,我們先看一下如何傳遞 int 型參數,定義如下的 Java 類:

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

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

          ??????? public native void printText(int i);

          ??????? public static void main(String[] args) {
          ??????????????? HelloWorld hw = new HelloWorld();
          ??????????????? hw.printText(100);
          ??????? }

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

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

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

          uses
          ? JNI;

          //我們給這個方法加的參數是: i: JInt
          procedure Java_alvinJNI_HelloWorld_printText(PEnv: PJNIEnv; Obj: JObject; i: JInt); stdcall;
          var
          ? tmpInt: Integer;

          begin
          ? //參數提交過來的 int 型數據,在這里是一個 JInt 數據,它其實就是一個 Integer 數據,它的使用更加方便
          ? //它可以直接地參與 Interger 類型數據的運算,是不是很容易.
          ? tmpInt := i + 100;
          ? tmpInt := tmpInt - 100;
          ? Writeln(tmpInt);
          end;

          exports
          ??????? Java_alvinJNI_HelloWorld_printText;
          end.
          //----------------------------------------------------------------------------------------------------------

          再看看效果吧,是不是成功了?

          這里如果是 long 型參數,接收時要設為 JLong 類型,它也可以跟對應的整型數運算,我們常用它跟 Int64 一起運算
          如果參數類型是 float ,接收參數時要設為 JFloat 類型,它也可以跟跟 Single 一起運算
          如果參數類型是 double ,接收參數時要設為 JDouble 類型,它也可以跟跟 Delphi 中的 Double 型數據一起運算
          如果參數類型是 boolean ,接收參數時要設為 JBoolean 類型,它也可以跟跟 Delphi 中的布爾型數據一起運算
          如果參數類型是 short ,接收參數時要設為 JShort 類型,它也可以跟跟 SmallInt 型數據一起運算
          如果參數類型是 byte ,接收參數時要設為 JByte 類型,它也可以跟跟 ShortInt 型數據一起運算
          如果參數類型是 Object 的 Java 對象,接收時要設為 JObject 類型,它的用法比較復雜(涉及到對 Java 類和對象的操作),我們在以后再來學習.
          如果參數類型是 Type[] 數組,接收參數時要設為 JObject 類型,因為 Java 是把數組作為對象看待的.它要以以下的方式來使用:

          例如: 我們要給 Delphi 的方法傳入一個 byte[] 型數組,在定義 Delphi 方法時參數聲明為 bytearray: JObject

          在方法中:
          var
          ?PByteArr: PJByte?? //PJByte 是 JNI.pas 定義的, 里面還有 PJBoolean, PJObject, PJInt 等..
          ?JVM: TJNIEnv;
          ?isCopy: Boolean;
          begin
          ?JVM:= TJNIEnv.Create(PEnv);
          ?isCopy := false;
          ?PByteArr := JVM.GetByteArrayElements(bytearray, isCopy);? //調用這個方法,可以將取得參數 bytearray 的地址, isCopy 決定是否復制數組
          ?//之后,我們可以通過 PByteArr 結合 inc(PByteArr) 這個指針來操作傳過來的數組.
          end;


          好了,就先說到這里,今天,你是不是又學到了什么?

          posted on 2006-12-02 03:12 林俊海 閱讀(578) 評論(3)  編輯  收藏 所屬分類: JAVA天地

          評論

          # re: 通過 JNI 讓 JAVA 與 Delphi 程序交互(三) 2008-06-07 16:57 何雙湛
          你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八你王八  回復  更多評論
            

          # re: 通過 JNI 讓 JAVA 與 Delphi 程序交互(三) 2008-06-07 17:01 鄙視湛↓------斌
          老樓上的垃圾就會叫 棧你這吃屎的東西!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!傻逼傻逼傻逼傻逼傻逼傻逼傻逼傻逼傻傻逼傻逼傻逼逼傻逼傻逼傻逼傻傻逼傻逼傻逼逼傻逼傻逼傻逼傻逼傻逼傻逼傻傻逼傻逼傻逼逼傻逼傻逼傻逼傻逼傻逼傻逼傻傻逼傻逼傻傻逼傻逼傻逼傻逼傻逼傻傻逼傻逼傻逼逼傻逼逼逼傻逼傻逼傻逼傻逼傻傻逼傻逼傻逼傻逼傻逼傻傻逼傻逼傻逼逼傻逼逼傻逼傻傻逼傻逼傻逼逼傻逼傻傻逼傻逼傻逼傻逼傻逼傻傻逼傻逼傻逼逼傻逼逼傻逼傻逼傻逼傻逼傻傻逼傻逼傻逼逼傻逼  回復  更多評論
            

          # re: 通過 JNI 讓 JAVA 與 Delphi 程序交互(三) 2008-06-07 17:56 林志斌
          @何雙湛

          我招你惹你了?  回復  更多評論
            

          主站蜘蛛池模板: 八宿县| 岳阳县| 兴国县| 秦皇岛市| 霍林郭勒市| 黔东| 永平县| 黔西县| 新津县| 长汀县| 渭源县| 邵东县| 绥芬河市| 宾阳县| 会理县| 安吉县| 沙坪坝区| 田林县| 广东省| 高尔夫| 秦皇岛市| 宜兰县| 大宁县| 穆棱市| 吕梁市| 皮山县| 石泉县| 遵义县| 宁陵县| 陈巴尔虎旗| 乡城县| 松溪县| 行唐县| 东兴市| 论坛| 绵阳市| 新晃| 凤阳县| 云梦县| 江川县| 镇坪县|