暂无图片
暂无图片
暂无图片
暂无图片
暂无图片
附录A 使用非JAVA代码.pdf
227
21页
0次
2021-02-22
50墨值下载
附录 A 使用非 JAVA 代码
JAVA 语言及其标准 API(应用程序编程接口)应付应用程序的编写已绰绰有余。但在某
情况下,还是必须使用非 JAVA 码。例如,我们有时要访问操作系统的专用特性,特殊
的硬件设备打交道,重复使用现有的非 Java 口,或者要使用“对时间敏感”的代码段
等等。与非 Java 码的沟通要求获得编译器和“虚拟机”的专门支持,并需附加的工具
Java 代码映射成 Java 码(也有一个简单方法:在第 15 章的“一个 Web 应用”小节中,
有个例子解释了如何利用标准输入输出同 Java 码连接)目前,不同的开发商为我们
供了不同的方案Java 1.1 有“Java 有接口Java Native InterfaceJNI,网景提出了自
己的Java 运行期接口”Java Runtime Interface计划,而微软提供了 J/Direct“本源接口”
Raw Native InterfaceRNI)以及 Java/COM 集成方案。
各开发商在这个问题上所持的不同态度对程序员是非常不利的。 Java 应用必须调用固
方法,则程序员或许要实现固有方法的不同版本——具体由应用程序运行的平台决定程序
员也许实际需要不同版本的 Java 代码,以及不同的 Java 虚拟机。
另一个方案 CORBA(通用对象请求代理结构)这是由 OMG(对象管理组,家非赢利
性的公司协会)开发的一种集成技术CORBA 并非任何语言的一部分是实现通用通信
总线及服务的一种规范。利用它可在由不同语言实现的对象之间实现“相互操作”的能力。
这种通信总线的名字叫作 ORB(对象请求代理)是由其他开发商实现的一种产品,并不
属于 Java 语言规范的一部分
本附录将 JNIJ/DIRECTRNIJAVA/COM 集成 CORBA 进行概述但不会作更深层
次的探讨,甚至有时还假定读者已对相关的概念和技术有了一定程度的认识但到最后,
家应该能够自行比较不同的方法,并根据自己要解决的问题挑选出最恰当的一种。
A.1 Java 固有接口
JNI 是一种包容极广的编程接口,许我们从 Java 应用程序里调用固有方法。它是在 Java 1.1
里新增的,维持着与 Java 1.0 的相应特性——“固有方法接口”NMI——某种程度的兼
容。NMI 设计上一些特点使其未获所有虚拟机的支持。考虑到这个原因Java 语言将来的
版本可能不再提供对 NMI 的支持,这儿也不准备讨论它。
目前,JNI 只能与用 C C++写成的固有方法打交道。利用 JNI,我们的固有方法可以
■创建、检查及更新 Java 对象(包括数组和字串)
■调用 Java 方法
■俘获和丢弃“异常”
■装载类并获取类信息
■进行运行期类型检查
所以,原来在 Java 中能对类及对象做的几乎所有事情在固有方法中同样可以做到。
A.1.1 调用固有方法
我们先从一个简单的例子开始:一个 Java 程序调用固有方法,后者再调用 Win32 API
MessageBox()显示出一个图形化的文本框。这个例子稍后也会与 J/Direct 一志使用。
您的平台不是 Win32,只需将包含了下述内容的 C 头:
#include <windows.h>
替换成:
#include <stdio.h>
并将对 MessageBox()的调用换成调用 printf()即可。
第一步是写出对固有方法及它的自变量进行声明的 Java 代码:
999 页程序
在固有方法声明的后面,跟随有一 static 代码块,它会调用 System.loadLibrary()(可在
何时候调用它,但这样做更恰当)System.loadLibrary()将一个 DLL 入内存,并建立同它的
链接。DLL 必须位于您的系统路径,或者在包含了 Java 类文件的目录中。根据具体的平台,
JVM 会自动添加适当的文件扩展名。
1. C 头文件生成器:javah
现在编译您 Java 文件,并对编译出来.class 文件运行 javahjavah 是在 1.0 版里提供
的,但由于我们要使用 Java 1.1 JNI,所以必须指定-jni 参数:
javah -jni ShowMsgBox
javah 会读入类文件,并为每个固有方法声明在 C C++文件里生成一个函数原型。下面
是输出结果——ShowMsgBox.h 源文件(为符合本书的要求,稍微进行了一下修改)
1000 页程序
从“#ifdef_cplusplus”这个预处理引导命令可以看出,该文件既可由 C 编译器编译,亦可由
C++编译器编译。第一#include 命令包括 jni.h——一个头文件,作用之一是定义在文件其
余部用到型;JNIEXPORT JNICALL 些宏它们行了的扩,以便
那些不同平台专用的引导命令配合;JNIEnvjobject 以及 jstring 则是 JNI 数据类型定义
of 21
50墨值下载
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文档的来源(墨天轮),文档链接,文档作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

关注
最新上传
暂无内容,敬请期待...
下载排行榜
Top250 周榜 月榜