2017-01-13 6 views
1

Ich habe nicht ein klares Verständnis der Ähnlichkeiten/Unterschiede oder die Beziehung sich zwischen COM (Component Object Model) erhalten und WinRT (Windows Runtime).Beziehung zwischen COM und WinRT

In meinem Verständnis sind beide da, um eine "Laufzeit-Engine" zu ermöglichen Komponente zu kommunizieren ... Ist das die CLR (Common Language Runtime)?

WinRT kam mit Windows 8, um eine gemeinsame Plattform für viele Sprachen zu ermöglichen.

Was ich hier nicht bekommen habe, ist das, hat WinRT COM ersetzt? Sind sie gleich?

Antwort

2

COM ist "nur" ein binärer Schnittstellenstandard für Softwarekomponenten (von wikipedia). Es gibt keine Laufzeit, keine Reihe von Base/Utility-Klassen (Nun, es gibt einige, wie Cross-Thread/Prozess-Marshalling, die Registrierung, COM +, aber Sie können COM ohne es tun).

COM wird absolut überall in Windows verwendet, in Clients und Servern verwendet, weil es in seinem tiefen Herzen "nur" eine vtable binding contract ist.

WinRT ist eine vollständige API auf COM (wieder, kein Motor). Also, es kommt mit einer Reihe von Basisklassen. Es ist de facto sehr orientiert für UI-Anwendungen (Windows Store). WinRT kommt auch mit einer Reihe von services (Metadaten, Typ System, Bereitstellung/speichern, etc.). Eine nützliche WinRT-Einführung ist hier verfügbar: WinRT demystified

Die CLR ist die Ausführungs-Engine, die .NET-Programme antreibt. Es kann auf Clients und Servern verwendet werden. Zum Beispiel ist der Garbage Collector dort implementiert. Tatsächlich wurde es in den letzten Jahren als Open-Source-Projekt auf andere Plattformen portiert als Windows: CoreCLR Die Windows CLR verwendet COM nur für einen Teil ihrer Arbeit, hauptsächlich für die Kommunikation mit der Windows-Plattform. WinRT verwendet die CLR nicht.

+0

* "(...) aber Sie können COM ohne es tun)." - Das gilt nur für In-Process-Objekte, die das aktuelle Apartment unterstützen. Sie können eine DLL laden und 'DllGetClassObject' selbst aufrufen, aber das ist eine sehr schlechte Übung, wenn Sie beabsichtigen, mit anderen COM-Objekten zu interagieren. COM und WinRT bieten eine große Infrastruktur, auf die über Bibliotheksaufrufe und Basisklassen zugegriffen werden kann.Obwohl sie keine obligatorische und umfangreiche "Laufzeit" wie CLR oder JVM definieren, haben sie ihre "Laufzeit" -Bibliotheken und -Klassen. – acelent

+0

@acelent - Ich habe nie gesagt, dass Sie COM nicht komplex machen können. Die einfachste COM ist nicht einmal über Dlls oder Interop, es ist nur ein binärer Vertrag. –

+0

Ich streite umgekehrt: Sie sollten keine der "Komplexitäten" von COM selbst ausführen. Und dass es eine Bibliothek, eine Reihe von Hilfs- und Basisklassen und eine Menge Buchhaltung in COM gibt. – acelent

0

Windows-Kernel ist in C-Sprache geschrieben und Windows-Komponente sind in C++ geschrieben. Wenn Ihre Frontend-Anwendung (z. B. Visual Basic oder C#) mit diesen Komponenten intakt sein muss, benötigen Sie eine Art Mechanismus/Standard, um mit diesen Komponenten zu interagieren. Dieser Interaktionsmechanismus // Standard heißt COM.

Laut Microsoft "COM ist ein plattformunabhängiges, verteiltes, objektorientiertes System zum Erstellen binärer Softwarekomponenten, die interagieren können".

Bitte beachten Sie, dass Sie. NET-Laufzeit nicht benötigen, um mit COM-Komponente zu interagieren. Es kann mit alten Sprachen wie Visual Basic, VC++ etc. aufgerufen werden.

Jetzt müssen die meisten Anwendungen, die in .Net- und .Net-Anwendungen entwickelt werden, mit Windows-Komponenten interagieren. Microsoft erstellt eine Schicht (API) oben auf der Windows-Komponente, so dass .NET-Anwendung problemlos mit der Windows-Komponente interagieren kann. Diese Ebene ist WinRT. Als Frontend-Entwickler müssen Sie mit WinRT interagieren und WinRT wird in Ihrem Namen mit der Windows-Komponente interagieren.

Bei .Net-Anwendungen ersetzt WinRT eventuell COM. Aber für Non-.Net-Anwendungen ist COM noch am Leben.

+0

WinRT ist die Basis-API für Metro/moderne Anwendungen. Es ist kein COM-Ersatz. – acelent

Verwandte Themen