現(xiàn)在難得來(lái)看一下自己的博客,今天好不容易找了個(gè)代理,順便再繼續(xù)之前的話題,就是 JAVA 與 Delphi 的交互了.
在上一篇中,我們說(shuō)了如何用 Java 調(diào)用 Delphi 程序的一個(gè)方法,今天我們?cè)偕钊胍稽c(diǎn),就是怎樣提交參數(shù)個(gè) Delphi 的方法,以動(dòng)態(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("您好!看到效果了吧。");
??????? }
}
//----------------------------------------------------------------------------------------------------------
我們?cè)傧裆洗我粯釉?Delphi 中建立 DLL 工程,寫(xiě)下面的代碼(有注釋):
//----------------------------------------------------------------------------------------------------------
library DelphiAction;
uses
? JNI;
//這一次我們要寫(xiě)的這個(gè)方法因?yàn)橐邮找粋€(gè) Java 傳過(guò)來(lái)的參數(shù),所以我們來(lái)說(shuō)一下這個(gè)參數(shù)列表的問(wèn)題
//參數(shù)列表中的第一個(gè)參數(shù) PEnv 類型為 PJNIEnv, 它是 JNI.pas中定義的類型,我們好多工作要通過(guò)它來(lái)實(shí)現(xiàn),可以把它看成是一個(gè)幫你的程序與 Java 溝通的橋梁.
//參數(shù)列表中的第一個(gè)參數(shù) obj 類型為 JObject.前面這兩個(gè)參數(shù)是固定的,這第二個(gè)參數(shù)暫時(shí)我們還不會(huì)用到.
//今天,我們還要給這個(gè)方法多加一個(gè)參數(shù),用來(lái)接受 Java 傳過(guò)來(lái)的參數(shù). str: JString
procedure Java_alvinJNI_HelloWorld_printText(PEnv: PJNIEnv; Obj: JObject; str: JString); stdcall;
//這回我們需要用到一個(gè) TJNIEnv 對(duì)象,我們來(lái)聲明
var
? JVM: TJNIEnv;
? tmpStr: String;
begin
? //實(shí)例化 JVM, 這個(gè)對(duì)象可以看成是 Java 的虛擬機(jī).(自己的理解)
? JVM := TJNIEnv.Create(PEnv);
? //參數(shù)提交過(guò)來(lái)的字符串,實(shí)際上是一個(gè) JString 對(duì)象,我們?cè)谶@里要用 JVM 來(lái)轉(zhuǎn)化它.
? //我們調(diào)用 JVM 的 UnicodeJStringToString 函數(shù)就可以實(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 看看效果了.
好了,我們今天主要就是實(shí)現(xiàn)了一下,如何在 Java 調(diào)用 Delphi 的方法時(shí),給其提交一個(gè)參數(shù).
是不是很爽?
今天就先說(shuō)到這里.接下來(lái),我會(huì)盡快的再貼上一些文章