Java通过JNI调用delphi程序.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Java通过JNI调用delphi程序

Java通过JNI调用delphi程序 2008年03月25日 星期二 下午 04:25 调用Delphi程序 通过在JNI框架内实战Java程序调用C程序,我们可以推导出Java程序基于JNI规范调用异质语言编写的程序的必要条件: — 被调用的函数和方法被封装在标准的动态链接库中,由动态链接库将其输出。这是整个JNI规范存在的基础。 — 在两种语言之间存在着一个充当“翻译”角色的中介。在Java调用C语言的场合中,这个中介就是jni.h:在开发被调用的动态链接库的过程中,首先引入jni.h,然后实现利用javah生成的头文件中定义的函数即可。 以上是实践JNI规范的必要条件。从中可以推导出以下的结论——任何语言只要能满足这两个条件,那么这种语言就具备被Java程序调用的可能性。 在Windows平台上,主流开发语言都能编译产生动态链接库;但是能找到一种类似jni.h、在两种异质语言之间映射数据结构的中介却不是非常容易。本章介绍Java语言如何在JNI框架内调用Delphi编译产生的动态链接库,在此过程中发挥类似jni.h作用的是jni.pas——同样由Sun公司开发,针对Delphi的JNI框架的实现。 Delphi是诞生于Win32时代的一款优秀的IDE,曾经拥有庞大的开发群体。随着Borland(相信本书的读者对Borland公司不会陌生,不仅因为它传奇般的故事,也因为它的另一款主打产品JBuilder)公司主营业务的转型,也随着Windows平台从Win32时代向.NET时代的迁移,Delphi也正在经历着深刻的蜕变。尽管如此,Delphi仍然保持着一年一个大版本的升级速度。Delphi拥有众多的成功案例,因此本书在介绍完Java和C语言的互操作之后,安排一节内容介绍Java如何调用Delphi程序。 本节涉及的Delphi程序在Delphi 7.0环境下编译通过。jni.pas在配书光盘中本节的源码目录中可以找到。 15.3.1 简单例程 在本章的顺序编排方面,先以一个最简单的例程“开场”,在这个例程中不涉及任何的参数传递,只要Java主调程序能够触发Delphi方法的执行便达到目的。 Delphi基于Object Pascal语言,Pascal语言的方法分为函数(Function)和过程(Procedure)两类。 我们先来看看做为主调方的Java程序。程序很简单:在HelloWorld寻找并载入Project1.dll,并定义本地方法:displayHelloWorld()。 代码清单15-15 调用Delphi函数的例程——HelloWorld 1.?????? public class HelloWorld 2.?????? { 3.?????? ?? public native void displayHelloWorld(); 4.?????? ?? static 5.?????? ?? { 6.?????? ???? System.loadLibrary(Project1); 7.?????? ?? } 8.?????? } Main则负责调用HelloWorld。 代码清单15-16 调用Delphi函数的例程——Main 1.?????? public class Main 2.?????? { 3.?????? ?? public static void main(String[] args) 4.?????? ?? { 5.?????? ???? HelloWorld hw = new HelloWorld(); 6.?????? ???? hw.displayHelloWorld(); 7.?????? ?? } 8.?????? } 接下来的工作是编写Delphi程序。关于Delphi语法、Delphi工程的结构,以及如何在Delphi中开发动态链接库,不准备介绍,本书假设读者们已经掌握相关知识。以下是Delphi工程文件(.dpr文件)——在Delphi中如果不涉及任何窗体的话,是无须创建单元文件的。 代码清单15-17 调用Delphi函数的例程——Project1.dpr 1.?????? library HelloWorldImpl; 2.?????? 3.?????? uses 4.?????? ?? JNI; 5.?????? 6.?????? procedure Java_HelloWorld_displayHelloWorld(PEnv: PJNIEnv; Obj: JObject); {$IFDEF WIN32} stdcall; {$ENDIF} {$IFDEF LINUX} cdecl; {$ENDIF} 7.?????? begin 8.?????? ?? Wri

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

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

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档