COM和WinRT之间的关系

时间:2017-01-13 01:22:59

标签: c# .net com windows-runtime

我没有清楚地了解 COM (组件对象模型)和 WinRT (Windows运行时)之间的相似性/差异或关系本身。< / p>

在我的理解中,他们两个都提供了一个&#34;运行时引擎&#34;使组件能够通信......那是CLR(公共语言运行时)吗?

WinRT与Windows 8一起推出了支持多种语言的通用平台。

我没有到达的地方是,WinRT取代了COM吗? 它们是一样的吗?

2 个答案:

答案 0 :(得分:3)

COM是“仅仅”软件组件的二进制接口标准(来自wikipedia)。 没有运行时,没有一组基础/实用程序类(好吧,有一些,如交叉线程/进程封送,注册表,COM +,但你可以在没有它的情况下执行COM)。

COM在Windows中无处不在,用于客户端和服务器,因为它的内心深处“只是”vtable binding contract

WinRT是COM上的完整API(同样,没有引擎)。因此,它带有一组基类。它非常适合UI应用程序(Windows应用商店)。 WinRT还附带了一组services(元数据,类型系统,部署/存储等)。这里有一个有用的WinRT介绍:WinRT demystified

CLR是为.NET程序提供支持的执行引擎。它可以在客户端和服务器上使用。例如,垃圾收集器在那里实现。事实上,去年它作为一个开源项目被移植到除Windows之外的其他平台:CoreCLR Windows CLR仅将COM用于其部分工作,主要用于与Windows平台通信。 WinRT不使用CLR。

答案 1 :(得分:0)

Windows内核是用C语言编写的,Windows组件是用C ++编写的。当您的前端应用程序(比如Visual Basic或c#)需要完整地使用这些组件时,您需要某种类型的机制/标准来与这些组件进行交互。这种交互机制//标准称为COM。

根据Microsoft“COM是一个独立于平台,分布式,面向对象的系统,用于创建可以交互的二进制软件组件”。

请注意,您不需要.Net运行时与COM组件进行交互。可以使用Visual Basic,VC ++等旧语言调用它。

现在,大多数在.Net和.Net应用程序中开发的应用程序都必须与Windows组件进行交互。 Microsoft在Windows组件的顶部构建一个层(API),以便.Net应用程序可以顺利地与Windows组件交互。这一层是WinRT。作为前端开发人员,您需要与WinRT进行交互,WinRT将代表您与Windows组件进行交互。

对于.Net应用程序,WinRT最终将取代COM。但对于非.Net应用程序,COM仍然存在。