COM 是一个对象在内存中以二进制级别表示的标准。考虑到这一点,在任何语言中使用 COM 对象都很容易。您只需要以 COM 要求的方式解释内存,您就可以控制 COM 对象。
我认为 CLR 是用相同的互操作性思想创建的,但是有一个抽象层,比如自己的语言(不是二进制)。考虑到这一点,CLR 如何实现像 COM 那样的二进制级别的互操作性?还是没有达到?
COM和CLR是互补的东西吗?或者是相互替代的东西,因为 MS 似乎一直在做。
使用 COM,您不依赖于虚拟机。使用 CLR,您是否依赖于虚拟机?
最佳答案
有天壤之别。 COM 通过简单 实现了互操作性。规则非常少,只有标准化的调用约定 (stdcall)、三种方法(AddRef、Release、QueryInterface)和跳转表(又名 v-table)的概念。其他一切都建立在该基础之上,在语言运行时实现 COM 支持非常简单且广泛可用。
非常优雅,但这确实是有代价的。 COM 中的错误处理特别薄弱,不支持异常。建库麻烦,不支持实现继承。 COM 编程被广泛认为是痛苦的,人们付出了很多努力来尽可能地隐藏它。最明显的例子是 WinRT,它是商店和 Windows Phone 应用程序的 API,由 COM 在后台提供支持,但几乎完全不可见。
托管代码互操作性是通过 IL 实现的,IL 是所有托管编译器生成的中间语言,与源语言无关。以定义明确 (Ecma 335) 且功能非常丰富的虚拟机规范为目标。
关于.net - CLR 如何实现 COM 实现的二进制级别的互操作性?或者不?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26552516/