聚合 管理  

          Blog Stats

          News

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

          隨筆分類(28)

          文章分類(4)

          隨筆檔案(53)

          文章檔案(4)

          相冊

          相關(guān)鏈接


          林俊海的博客

          超級大菜鳥,每天要自強(qiáng)!

          ?

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


          首先,我們先看一下如何傳遞 int 型參數(shù),定義如下的 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;

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

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

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

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

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

          例如: 我們要給 Delphi 的方法傳入一個 byte[] 型數(shù)組,在定義 Delphi 方法時參數(shù)聲明為 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);? //調(diào)用這個方法,可以將取得參數(shù) bytearray 的地址, isCopy 決定是否復(fù)制數(shù)組
          ?//之后,我們可以通過 PByteArr 結(jié)合 inc(PByteArr) 這個指針來操作傳過來的數(shù)組.
          end;


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

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

          評論

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

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

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

          我招你惹你了?  回復(fù)  更多評論
            

          主站蜘蛛池模板: 库尔勒市| 舟山市| 新宾| 汝南县| 道孚县| 苏州市| 辽阳市| 雷山县| 化隆| 微山县| 杂多县| 沾化县| 遵义市| 齐齐哈尔市| 铁岭县| 江陵县| 枣阳市| 易门县| 油尖旺区| 晋城| 曲阳县| 武定县| 夏邑县| 平顺县| 巴里| 永昌县| 永寿县| 含山县| 交口县| 博乐市| 望城县| 永嘉县| 富民县| 铜山县| 桐梓县| 区。| 阳西县| 鹿泉市| 贵溪市| 嘉禾县| 和平县|