返回介绍

A.5 Java/COM 集成

发布于 2024-10-15 23:56:37 字数 2019 浏览 0 评论 0 收藏 0

COM(以前称为 OLE)代表微软公司的“组件对象模型”(Component Object Model),它是所有 ActiveX 技术(包括 ActiveX 控件、Automation 以及 ActiveX 文档)的基础。但 COM 还包含了更多的东西。它是一种特殊的规范,按照它开发出来的组件对象可通过操作系统的专门特性实现“相互操作”。在实际应用中,为 Win32 系统开发的所有新软件都与 COM 有着一定的关系——操作系统通过 COM 对象揭示出自己的一些特性。由其他厂商开发的组件也可以建立在 COM 的基础上,我们能创建和注册自己的 COM 组件。通过这样或那样的形式,如果我们想编写 Win32 代码,那么必须和 COM 打交道。在这里,我们将仅仅重述 COM 编程的基本概念,而且假定读者已掌握了 COM 服务器(能为 COM 客户提供服务的任何 COM 对象)以及 COM 客户(能从 COM 服务器那里申请服务的一个 COM 对象)的概念。本节将尽可能地使叙述变得简单。工具实际的功能要强大得多,而且我们可通过更高级的途径来使用它们。但这也要求对 COM 有着更深刻的认识,那已经超出了本附录的范围。如果您对这个功能强大、但与不同平台有关的特性感兴趣,应该研究 COM 和微软公司的文档资料,仔细阅读有关 Java/COM 集成的那部分内容。如果想获得更多的资料,向您推荐 Dale Rogerson 编著的《Inside COM》,该书由 Microsoft Press 于 1997 年出版。

由于 COM 是所有新型 Win32 应用程序的结构核心,所以通过 Java 代码使用(或揭示)COM 服务的能力就显得尤为重要。Java/COM 集成无疑是 Microsoft Java 编译器以及虚拟机最有趣的特性。Java 和 COM 在它们的模型上是如此相似,所以这个集成在概念上是相当直观的,而且在技术上也能轻松实现无缝结合——为访问 COM,几乎不需要编写任何特殊的代码。大多数技术细节都是由编译器和/或虚拟机控制的。最终的结果便是 Java 程序员可象对待原始 Java 对象那样对待 COM 对象。而且 COM 客户可象使用其他 COM 服务器那样使用由 Java 实现的 COM 服务器。在这里提醒大家,尽管我使用的是通用术语“COM”,但根据扩展,完全可用 Java 实现一个 ActiveX Automation 服务器,亦可在 Java 程序中使用一个 ActiveX 控件。

Java 和 COM 最引人注目的相似之处就是 COM 接口与 Java 的“interface”关键字的关系。这是接近完美的一种相符,因为:

  • COM 对象揭示出了接口(也只有接口)
  • COM 接口本身并不具备实施方案;要由揭示出接口的那个 COM 对象负责它的实施
  • COM 接口是对语义上相关的一组函数的说明;不会揭示出任何数据
  • COM 类将 COM 接口组合到了一起。Java 类可实现任意数量的 Java 接口。
  • COM 有一个引用对象模型;程序员永远不可能“拥有”一个对象,只能获得对对象一个或多个接口的引用。Java 也有一个引用对象模型——对一个对象的引用可“造型”成对它的某个接口的引用。
  • COM 对象在内存里的“生存时间”取决于使用对象的客户数量;若这个数量变成零,对象就会将自己从内存中删去。在 Java 中,一个对象的生存时间也由客户的数量决定。若不再有对那个对象的引用,对象就会等候垃圾收集器的处理。

Java 与 COM 之间这种紧密的对应关系不仅使 Java 程序员可以方便地访问 COM 特性,也使 Java 成为编写 COM 代码的一种有效语言。COM 是与语言无关的,但 COM 开发事实上采用的语言是 C++和 Visual Basic。同 Java 相比,C++在进行 COM 开发时显得更加强大,并可生成更有效的代码,只是它很难使用。Visual Basic 比 Java 简单得多,但它距离基础操作系统太远了,而且它的对象模型并未实现与 COM 很好的对应(映射)关系。Java 是两者之间一种很好的折衷方案。

接下来,让我们对 COM 开发的一些关键问题进行讨论。编写 Java/COM 客户和服务器时,这些问题是首先需要弄清楚的。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文