【问题标题】:what is the equivalent of COM in Mac OS?Mac OS 中的 COM 等价物是什么?
【发布时间】:2009-10-27 19:57:26
【问题描述】:

我是 Mac 编程领域的新手。有人可以告诉我 Mac 中可重用 COM 组件的等价物是什么,以及一些指向良好资源的链接以供入门(创建可重用的类似 COM 的组件并从调用应用程序引用这些组件)?谢谢。

澄清:
- 我想知道是否存在类似的技术,在操作系统级别支持。
- 我问这个问题是因为我想将我的一些应用程序(利用现有的 Windows 类型库以及我制作的类型库)移植到 Mac。
- 我是否可以为现有的 (Window) 类型库创建包装类并从 Mac 应用程序中引用它们?

【问题讨论】:

  • 具体要求是什么?例如,您需要 IPC/编组吗? RPC?持久存储?用户界面嵌入? RTTI/DispInvoke/脚本?
  • 作为一个从 Mac 开始的 RPC,UI 嵌入可能太多了。但是调度/调用/脚本更可能是我需要的。

标签: com macos


【解决方案1】:

我认为来自 Mac 开发中心的Getting Started with Interapplication Communication 将是一个不错的起点。据我所知,在整个操作系统中没有直接等效于 COM/OLE,但 XPCOM 和 CORBA 可用于某些场景。

Distributed Objects Programming Topics 可能是寻找传统 Mac 解决方案以使应用相互通信的最佳位置。

【讨论】:

    【解决方案2】:

    Cocoa/Objective-C 对象几乎是你所需要的。在更高的层次上,NIB 可以在应用程序之间重复使用,尽管我不认为这被广泛使用。

    您可以为 Interface Builder 编写插件,以使用您自己的组件,就像标准组件一样。

    Apple Events 和 AppleScript 是标准的 IPC 和脚本技术。

    然而,与 Windows 世界中的 COM 不同,对于通过标准接口相互交互、存在于标准容器中、参与事务等的组件实际上没有标准约定。没有类型库或 IDL 的类似物(虽然脚本字典可能很接近)。

    【讨论】:

      【解决方案3】:

      嗯,有XPCOM

      【讨论】:

      • XPCOM 是一个 mozilla 的东西。除非您正在构建浏览器插件,否则它并不真正相关。
      • 可以在 Mozilla 之外使用 XPCOM,在二进制级别上,它实际上主要是 COM(相同的 vtable 布局,相同的基本接口......)。但当然它不是通用的,所以它只能用于在两个明确同意使用它的应用程序之间进行通信。
      【解决方案4】:

      在 Mac OS X 中没有什么比 COM 更相似(我假设您说的是 OS X,而不是经典的 Mac OS)。如果你想编写可重用的组件或 Cocoa 应用程序,它真的很简单:

      1. 编写您的课程
      2. 创建共享库项目
      3. 构建库并分发它

      对于 COM 的迭代进程通信和嵌入部分,真的没有任何标准化的东西。

      【讨论】:

      • 对于 IPC,OS X 有 Apple Events/AppleScript 和 Portable Distributed Objects。这些已经是二十年来的标准。
      • 这听起来更像是一个等效于 COM 的 DLL。
      • @Will -- 嗯,在某种程度上,除了 DLL 和对象和接口系统之外,COM 是什么?在 Mac OS 中,.dylib 提供前者,而 objC 运行时提供后者。
      • Chuck,虽然我不同意 AppleEvents 和 PDO 存在,但它们并不是 COM IPC 的完全替代品。您可以在 PDO 上实现接口枚举系统,但它并没有真正提供开箱即用的任何东西。并且没有任何东西(据我所知)提供与 COM 容器等效的东西。许多 Cocoa 应用程序为可加载的包提供了一个接口,但同样,没有枚举功能(除非应用程序开发人员指定一个),因此您不能做将通用组件嵌入到多个应用程序中的技巧。
      【解决方案5】:

      您可能想查看Mono。尽管它不会让您直接重用现有的 Windows 特定 COM 代码,但它确实为您提供了跨不同编程语言(任何具有 CLI 编译器的语言)甚至不同操作系统(例如 Windows、 Mac、Linux)。

      我还推荐CocoaSharp 直接连接到本机 Mac OS X 库。

      【讨论】:

        【解决方案6】:

        也许是CFPlugin

        From Apple statement(现已成为存档文件):

        插件模型兼容微软COM的基础 (组件对象模型)架构。这意味着插件 接口是根据 COM 指南布局的,并且所有 接口必须继承自 COM 的 IUnknown 接口。这些是 只有元素插件与 COM 共享。其他 COM 概念,例如 IClassFactory 接口、聚合、进程外服务器和 Windows 注册表未映射。本文档仅涵盖最低限度 必要的 COM 概念来解释它们在 Core 中的使用方式 基础插件。如需更多信息,我们鼓励您 查找已经发布的有关 COM 的大量文档。一种 好的起点是微软网站的 COM 区域, http://www.microsoft.com/com/tech/com.asp.

        它最初致力于插件架构,但它似乎可以用作 COM 等价物,请参阅 this 旧帖子和 Joe 的“Mac OS X 高级开发技术”的第 5 章(碳插件)佐布奎。不幸的是,我找不到更多示例。

        【讨论】:

          猜你喜欢
          • 2012-09-06
          • 1970-01-01
          • 2017-04-04
          • 1970-01-01
          • 2014-09-16
          • 2011-04-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多