聚合 管理  

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 林俊海 阅读(575) 评论(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 林志斌
@何双湛

我招你惹你了?  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: