Java通过JNI调用delphi程序

Java通过JNI调用delphi程序

ID:39549800

大小:61.00 KB

页数:9页

时间:2019-07-06

Java通过JNI调用delphi程序_第1页
Java通过JNI调用delphi程序_第2页
Java通过JNI调用delphi程序_第3页
Java通过JNI调用delphi程序_第4页
Java通过JNI调用delphi程序_第5页
资源描述:

《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.可以看到,在

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。