2017-01-13 16 views
1

я не получил четкого понимания сходства/различий или самого отношения между COM (Component Object Model) и WinRT (Windows Runtime).связь между COM и WinRT

В моем понимании, оба из них существуют, чтобы обеспечить «механизм выполнения», чтобы включить компонент для связи ... Является ли это CLR (Common Language Runtime)?

WinRT пришел с Windows 8, чтобы включить общую платформу для многих языков.

Что я не понял, что WinRT заменил COM? Они такие же?

ответ

2

COM «просто» стандарт двоичного интерфейса для программного компонента (от wikipedia). Существует нет времени выполнения, нет набора базовых/служебных классов (ну, есть некоторые, например, кросс-нить/процесс маршалинга, реестр, COM +, но вы можете делать COM без него).

COM используется абсолютно повсеместно в Windows, используется в клиентах и ​​серверах, потому что в глубине души «просто» vtable binding contract.

WinRT - полнофункциональный API поверх COM (опять же, без двигателя). Таким образом, он поставляется с набором базовых классов. Это defacto очень ориентирован для приложений пользовательского интерфейса (Windows Store). WinRT также поставляется с набором services (метаданные, тип системы, развертывание/хранилище и т. Д.). Полезное введение WinRT можно найти здесь: WinRT demystified

CLR - это механизм выполнения, который поддерживает программы .NET. Он может использоваться на клиентах и ​​серверах. Например, там собирается сборщик мусора. Фактически, в последние годы он был перенесен на другие платформы, чем Windows, в качестве проекта с открытым исходным кодом: CoreCLR Windows CLR использует COM только для некоторых своих работ, в основном для связи с платформой Windows. WinRT не использует CLR.

+0

* "(...), но вы можете сделать COM без него)." - Это справедливо только для объектов in-process, которые поддерживают текущую квартиру. Вы можете загрузить DLL и вызвать 'DllGetClassObject' самостоятельно, но это очень плохая практика, если вы собираетесь взаимодействовать с другими COM-объектами. Кроме того, как COM, так и WinRT предоставляют множество инфраструктур, доступных через вызовы библиотек и базовые классы.Таким образом, хотя они не определяют обязательную и обширную «среду выполнения», такую ​​как CLR или JVM, у них есть свои библиотеки и классы «времени исполнения». – acelent

+0

@acelent - Я никогда не говорил, что вы не можете делать сложный COM. Самый простой COM - это даже не Dll, или interop, это просто бинарный контракт. –

+0

Я спорю по-другому: вы не должны выполнять какие-либо «сложности» COM самостоятельно. И что есть библиотека, набор вспомогательных и базовых классов и много бухгалтерии в COM. – acelent

0

Ядро Windows написано на языке C, а компонент Windows написан на C++. Когда ваше внешнее приложение (скажем, Visual Basic или C#) должно быть интактным с этими компонентами, для взаимодействия с этими компонентами необходим какой-то тип механизма/стандарта. Этот механизм взаимодействия // стандарт называется COM.

Согласно Microsoft «COM - независимая от платформы, распределенная, объектно-ориентированная система для создания компонентов двоичного программного обеспечения, которые могут взаимодействовать».

Обратите внимание, что вам не требуется .Net run-time для взаимодействия с компонентом COM. Его можно вызвать с использованием старых языков, таких как Visual Basic, VC++ и т. Д.

Теперь большинство приложений, разрабатываемых в приложениях .Net и .Net, должны взаимодействовать с компонентами Windows. Microsoft строит слой (API) в верхней части компонента Windows, так что приложение .Net может взаимодействовать с компонентом Windows плавно. Этот слой является WinRT. Как разработчик интерфейса, вам необходимо взаимодействовать с WinRT, и WinRT будет взаимодействовать с компонентом Windows от вашего имени.

Для приложений .Net WinRT в конечном итоге заменит COM. но для приложений Non .Net COM все еще жив.

+0

WinRT - это базовый API для метро/современных приложений. Это не замена COM. – acelent

 Смежные вопросы

  • Нет связанных вопросов^_^