WEB开发网
开发学院软件开发Java 弥补和 COM 的缝隙 阅读

弥补和 COM 的缝隙

 2010-04-01 00:00:00 来源:WEB开发网   
核心提示: 什么是 JNI?Java 语言的设计者认识到创建 100% 的纯 Java 应用程序是个宏伟的目标,他们也知道事实上,弥补和 COM 的缝隙(2),这个目标通常很难达到,随着开发新的 Java 应用程序,如果此数组(或任何其它值)是 BYTEREF ,那么 Bridge2Java 必须能用更新的

什么是 JNI?

Java 语言的设计者认识到创建 100% 的纯 Java 应用程序是个宏伟的目标。他们也知道事实上,这个目标通常很难达到。随着开发新的 Java 应用程序,开发者经常不情愿丢弃以前写的可能很昂贵或者很难的原码。 Java 的本机接口或者说 JNI,提供了一个由 Java 虚拟机(JVM)出来并进入 JVM 在运行的本机计算机世界的通道(doorway)。通过使用这个通道,Java 程序员可以使用先前昂贵的或者不可能的原码来重写成 Java 代码。JNI 允许本机代码调用 JVM,创建并访问对象,调用对象方法并访问实例变量。这种折中为开发者丢弃了 Java 平台的“写一次,在任何地方运行”这个好处,因为调用的任何本机代码将会被捆绑到特殊的平台。

JNI:基本原理

Java 世界和 COM 世界的边界被用“Java 本机接口”(Java Native Interface(JNI))桥接起来了。只有两个 JNI 调用是必需的:一个是创建 COM 服务器,另一个是处理 Invoke() 方法。只要发生了一次 Java 函数调用就调用 Invoke() ;它事实上是整个“Java 到 COM”过程的要核。然而,如果连接 Java 和 COM 对象和通过 Invoke() 传送一个从 Java 代码到 COM 的调用一样简单,那么 Bridge2Java 将会是一个非常简单的程序。Bridge2Java 的实际工作是在把 Java 变量转变成 COM 能理解的变量类型来完成的。变量称为 VARIANT 并且是包含所有可能类型和指出存储的数据实际类型值的结构。大多数 Java 变量巧妙映射到 VARIANT ― 例如,一个 int 很容易地映射到 VARIANT 中的 VT_I4 类型。实际的困难是在于将象 SAFEARRAY 和 BYREF 值这样的 COM 类型映射到 Java 的等价类型。

转换变量的过程由一个 Java 代理调用开始,该调用创建并批量装入一个自定义建立的 Java 版的 VARIANT ,称为 Jvariant 。这个 Jvariant 能包含所有的 Java 变量类型,再加上一个域,该域指出包含的数据应该被转换成 COM 端的哪种类型。Bridge2Java 中的 SAFEARRAYS 被以 Jvariant 数组形式从 Java 代码传入。Bridge2Java 然后在 COM 端构建适当类型的数组并用输入数组的值批量装入它。如果此数组(或任何其它值)是 BYTEREF ,那么 Bridge2Java 必须能用更新的值替代传入的值。它通过使用数个来自 COM 端的允许更新 Java 数组元素的 JNI 调用之一做到这一点。

上一页  1 2 3 4 5  下一页

Tags:弥补 COM 缝隙

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接