- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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
您可能关注的文档
最近下载
- 2024年黑龙江省哈尔滨市中考语文试题(含官方答案).docx
- 小学五年级语文上册教学课件《古诗三首》.pptx VIP
- 滨州医学院毕业答辩简洁模板.ppt
- 成人呼吸支持治疗器械相关压力性损伤的预防——2023中华护理学会团体标准.pptx VIP
- 数学--高思课本和乐乐课堂名称对应(1).pdf
- 常暗之厢常闇の箱.pdf
- 成人呼吸支持治疗器械相关压力性损伤的预防(2023中华护理学会团体标准).pptx VIP
- 《调皮的小猫咪》-美术课件.ppt VIP
- 七年级语文上册第二单元整体教学设计-优质教案.docx
- 成人呼吸支持治疗器械相关压力性损伤的预防-2023中华护理学会团体标准.pptx VIP
文档评论(0)