Java JNI 和 Delphi 相互调用分析和总结.docx

Java JNI 和 Delphi 相互调用分析和总结.docx

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

JavaJNI和Delphi相互調用(1)-JAVA調用DELPHI

JNI不是什麼新技術,英文全稱是:JavaNativeInterface,JAVA本地化代碼接口。本地化代碼是指直接編譯成的與機器相關的二進制代碼,而不是Java字節碼之類的中間代碼。對於JNI的來龍去脈,不作介紹了,在有介紹,另外BAIDU/GOOGLE搜索,也有大把的。這裏僅僅做一個入門級的介紹和實現。

JAVA發佈的是C/C++的接口文檔,DELPHI想調用,首先要轉換成DELPHI的接口文檔。很幸運,已經有人完成此項工作了,請看網站:/,在網站中下載JNI-JEDI.zip,解出來後,將pas文件放在我們要創建的工程的源文件一塊就可以了。好,下面準備進入主題。

一、先介紹JAVA調用DELPHI的過程

1、創建一個J_Call_D.java,文件的內容:

publicclassJavaCallDelphi {static{

System.loadLibrary(JavaCallDelphi);

}

public

native

voidsayHello(Strings);

public

native

Stringecho(Strings);

public

native

voidshowForm(Strings);

publicstaticvoidmain(String[]args){JavaCallDelphijc=newJavaCallDelphi();

System.out.println(java say:echo()returned:+jc.echo(華夏上下午千年));jc.sayHello(橙子);

jc.showForm(華夏上下午千年);

}

}

為了簡單,這裏就不創建“包”了。我們將這個class保存成無BOM的UTF-8格式文件。再用下面這個命令行進行編譯:javac-encodingutf-8JavaCallDelphi.java

這個class現在是不能執行的,因為還沒有JavaCallDelphi.dll。2、創建Delphi的庫工程

先提一下JAVA的類和方法的命名和DELPHI中的函數的命名的規律。

在DELPHI中的函數,以Java開頭,用下劃線將Java類的包名、類名和方法名連起來。本例中沒有包名,忽略了。同時,在Win32平台上,此過程的調用方式只能聲明為stdcall。

例如,Delphi中的方法:

procedureJava_JavaCallDelphi_sayHello(PEnv:PJNIEnv;Obj:JObject;S:jstring);stdcall;

方法中的參數,前兩個是固定的,有什麼用請看後面的DELPHI的代碼,不深入講解;後面的參數就是JAVA和DELPHI之間傳送的參數。JAVA的數據類型轉換到DELPHI的數據類型,在jni.pas中有定義。

JavaCallDelphi.dpr的代碼:libraryJavaCallDelphi;

useswindows,SysUtils,Classes, jni,Forms,StdCtrls;

procedureJava_JavaCallDelphi_sayHello(PEnv: PJNIEnv;Obj:JObject;S:jstring);stdcall;varJVM:TJNIEnv;

begin

JVM:=TJNIEnv.Create(PEnv);

Writeln(Delphisay:+JVM.UnicodeJStringToString(s)+,您好!看到效果了吧。);JVM.Free;

end;

functionJava_JavaCallDelphi_echo(PEnv: PJNIEnv;Obj:JObject;arg:JString):JString;stdcall;vartmpStr,s1:String; JVM:TJNIEnv;

begin

end;

JVM:=TJNIEnv.Create(PEnv);Write(Delphisay:jvmVersion:);Write(jvm.MajorVersion); Write(.);Write(jvm.MinorVersion);

Writeln();s1:=JVM.UnicodeJStringToString(arg);

tmpStr:=傳入的參數是:+s1+

文档评论(0)

mph + 关注
官方认证
内容提供者

该用户很懒,什么也没介绍

认证主体上海谭台科技有限公司
IP属地上海
统一社会信用代码/组织机构代码
91310115MA7CY11Y3K

1亿VIP精品文档

相关文档