现在难得来看一下自己的博客,今天好不容易找了个代理,顺便再继续之前的话题,就是 JAVA 与 Delphi 的交互了.
在上一篇中,我们说了如何用 Java 调用 Delphi 程序的一个方法,今天我们再深入一点,就是怎样提交参数个 Delphi 的方法,以动态的控制 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 传过来的参数,所以我们来说一下这个参数列表的问题
//参数列表中的第一个参数 PEnv 类型为 PJNIEnv, 它是 JNI.pas中定义的类型,我们好多工作要通过它来实现,可以把它看成是一个帮你的程序与 Java 沟通的桥梁.
//参数列表中的第一个参数 obj 类型为 JObject.前面这两个参数是固定的,这第二个参数暂时我们还不会用到.
//今天,我们还要给这个方法多加一个参数,用来接受 Java 传过来的参数. 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);
//参数提交过来的字符串,实际上是一个 JString 对象,我们在这里要用 JVM 来转化它.
//我们调用 JVM 的 UnicodeJStringToString 函数就可以实现 JString 到 String 的转化了.
tmpStr := JVM.UnicodeJStringToString(str);
Writeln(tmpStr);
//我们使用完 JVM 后,要将其释放.
JVM.Free;
end;
exports
Java_alvinJNI_HelloWorld_printText; //为函数做引出声明,这样才能真正的被调用到
end.
//----------------------------------------------------------------------------------------------------------
我们现在就可以生成 DelphiAction.dll 将其放在 Java 工程目录下, 再执行 alvinJNI.HelloWorld 看看效果了.
好了,我们今天主要就是实现了一下,如何在 Java 调用 Delphi 的方法时,给其提交一个参数.
是不是很爽?
今天就先说到这里.接下来,我会尽快的再贴上一些文章