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)。
查看更多
Java JNI 和 Delphi 相互調用(1)-JAVA 調用 DELPHI JNI 不是什麼新技術,英文全稱是:Java Native Interface,JAVA 本地化代碼接口。本地化代碼是指直接編譯成的與機器相關的二進制代碼,而不是 Java 字節碼之類的中間代碼。對於 JNI 的來龍去脈,不作介紹了,在 有介紹,另外 BAIDU/GOOGLE 有哪些信誉好的足球投注网站,也有大把的。這裏僅僅做一個入門級的介紹和實現。 JAVA 發佈的是 C/C++的接口文檔,DELPHI 想調用,首先要轉換成 DELPHI 的接口文檔。很幸運,已經有人完成此項工作了,請看網站: / ,在網站中下載 JNI-JEDI.zip ,解出來後,將 pas 文件放在我們要創建的工程的源文件一塊就可以了。好,下面準備進入主題。 一、先介紹 JAVA 調用 DELPHI 的過程 1、創建一個 J_Call_D.java,文件的內容: public class JavaCallDelphi { static { System.loadLibrary(JavaCallDelphi); } public native void sayHello(String s); public native String echo(String s); public native void showForm(String s); public static void main(String[] args) { JavaCallDelphi jc = new JavaCallDelphi(); System.out.println(java say: echo() returned:+jc.echo( 華夏上下午千年) ); jc.sayHello(橙子); jc.showForm(華夏上下午千年); } } 為了簡單,這裏就不創建“包”了。我們將這個 class 保存成無 BOM 的 UTF-8 格式文件。再用下面這個命令行進行編譯: javac -encoding utf-8 JavaCallDelphi.java 這個 class 現在是不能執行的,因為還沒有 JavaCallDelphi.dll 。 2、創建 Delphi 的庫工程 先提一下 JAVA 的類和方法的命名和 DELPHI 中的函數的命名的規律。 在 DELPHI 中的函數,以 Java 開頭,用下劃線將 Java 類的包名、類名和方法名連起來。本例中沒有包名,忽略了。同時,在 Win32 平台上,此過程的調用方式只能聲明為 stdcall。 例如,Delphi 中的方法: procedure Java_JavaCallDelphi_sayHello(PEnv: PJNIEnv; Obj: JObject; S: jstring); stdcall; 方法中的參數,前兩個是固定的,有什麼用請看後面的 DELPHI 的代碼,不深入講解;後面的參數就是 JAVA 和 DELPHI 之間傳送的參數。JAVA 的數據類型轉換到 DELPHI 的數據類型,在 jni.pas 中有定義。 JavaCallDelphi.dpr 的代碼: library JavaCallDelphi; uses windows, SysUtils, Classes, jni, Forms, StdCtrls; procedure Java_JavaCallDelphi_sayHello(PEnv: PJNIEnv; Obj: JObject; S: jstring); stdcall; var JVM: TJNIEnv; begin JVM:= TJNIEnv.Create(PEnv); Writeln(Delphi say:+JVM.UnicodeJStringToString(s)+,您好!看到效果了吧。); JVM.Free; end; function Java_JavaCallDelphi_echo(PEnv: PJNIEnv; Obj: JObject; arg: JString): JString; stdcall; var tmpStr, s1: String; JVM: TJNIEnv; begin JVM:= TJNIEnv.Create(PEnv); Write(Delphi say:jvm Version :); Write(jvm.MajorVersion); Write(.); Write(jvm.MinorVersion); Writeln(); s1:=JVM.UnicodeJStringToString(arg); tmpStr := 傳入的參數是: + s1 + 。; Writeln(Delphi sa

文档评论(0)

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

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

认证主体阳新县融易互联网技术工作室
IP属地上海
统一社会信用代码/组织机构代码
92420222MA4ELHM75D

1亿VIP精品文档

相关文档