欢迎来到天天文库
浏览记录
ID:39549800
大小:61.00 KB
页数:9页
时间:2019-07-06
《Java通过JNI调用delphi程序》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Java通过JNI调用delphi程序2008年03月25日星期二下午04:25调用Delphi程序通过在JNI框架内实战Java程序调用C程序,我们可以推导出Java程序基于JNI规范调用异质语言编写的程序的必要条件:—被调用的函数和方法被封装在标准的动态链接库中,由动态链接库将其输出。这是整个JNI规范存在的基础。—在两种语言之间存在着一个充当“翻译”角色的中介。在Java调用C语言的场合中,这个中介就是jni.h:在开发被调用的动态链接库的过程中,首先引入jni.h,然后实现利用javah生成的头文件中定义的函数即可。以上是实践JNI规范的必要条件。从中可以推导出以下的结论——任何语
2、言只要能满足这两个条件,那么这种语言就具备被Java程序调用的可能性。在Windows平台上,主流开发语言都能编译产生动态链接库;但是能找到一种类似jni.h、在两种异质语言之间映射数据结构的中介却不是非常容易。本章介绍Java语言如何在JNI框架内调用Delphi编译产生的动态链接库,在此过程中发挥类似jni.h作用的是jni.pas——同样由Sun公司开发,针对Delphi的JNI框架的实现。Delphi是诞生于Win32时代的一款优秀的IDE,曾经拥有庞大的开发群体。随着Borland(相信本书的读者对Borland公司不会陌生,不仅因为它传奇般的故事,也因为它的另一款主打产品JBu
3、ilder)公司主营业务的转型,也随着Windows平台从Win32时代向.NET时代的迁移,Delphi也正在经历着深刻的蜕变。尽管如此,Delphi仍然保持着一年一个大版本的升级速度。Delphi拥有众多的成功案例,因此本书在介绍完Java和C语言的互操作之后,安排一节内容介绍Java如何调用Delphi程序。本节涉及的Delphi程序在Delphi7.0环境下编译通过。jni.pas在配书光盘中本节的源码目录中可以找到。15.3.1简单例程在本章的顺序编排方面,先以一个最简单的例程“开场”,在这个例程中不涉及任何的参数传递,只要Java主调程序能够触发Delphi方法的执行便达到目的
4、。Delphi基于ObjectPascal语言,Pascal语言的方法分为函数(Function)和过程(Procedure)两类。我们先来看看做为主调方的Java程序。程序很简单:在HelloWorld寻找并载入Project1.dll,并定义本地方法:displayHelloWorld()。代码清单15-15调用Delphi函数的例程——HelloWorld1. publicclassHelloWorld2. {3. publicnativevoiddisplayHelloWorld();4. static5. {6.
5、 System.loadLibrary("Project1");7. }8. }Main则负责调用HelloWorld。代码清单15-16调用Delphi函数的例程——Main1. publicclassMain2. {3. publicstaticvoidmain(String[]args)4. {5. HelloWorldhw=newHelloWorld();6. hw.displayHelloWorld();7. }8. }接下来的工作是编写
6、Delphi程序。关于Delphi语法、Delphi工程的结构,以及如何在Delphi中开发动态链接库,不准备介绍,本书假设读者们已经掌握相关知识。以下是Delphi工程文件(.dpr文件)——在Delphi中如果不涉及任何窗体的话,是无须创建单元文件的。代码清单15-17调用Delphi函数的例程——Project1.dpr1. libraryHelloWorldImpl;2. 3. uses4. JNI;5. 6. procedureJava_HelloWorld_displayHelloWorld(PEnv:PJNIEn
7、v;Obj:JObject);{$IFDEFWIN32}stdcall;{$ENDIF}{$IFDEFLINUX}cdecl;{$ENDIF}7. begin8. WriteLn('Helloworld!');9. end;10. 11. exports12. Java_HelloWorld_displayHelloWorld;13. 14. end.可以看到,在
此文档下载收益归作者所有