2009-03-27 11 views

Antwort

12

.NET-Komponenten werden verwalteten Code (Speicher zur Verfügung für Sie erledigt)

COM ist ein Schnittstellenstandard für Software-Komponenten. COM-Komponenten sind nicht gemanagter Code (die Speicherentsorgung erfolgt durch Referenzzählung).

Von here:

Wie COM und .NET verwandt?

COM und .NET sind komplementäre Entwicklung Technologien. Die .NET Common Language Runtime bietet bidirektionale, transparente Integration mit COM. Diese bedeutet, dass COM und .NET-Anwendungen und Komponenten die Funktionalität von jedem System verwenden können. Dies schützt Ihre bestehenden Investitionen in COM Anwendungen, während Sie Vorteile von .NET bei einer kontrollierten Geschwindigkeit zu nutzen. COM und .NET können ähnliche Ergebnisse erzielen. Das .NET Framework bietet Entwickler mit einer signifikanten Anzahl von von Vorteilen einschließlich einer robusteren, evidenzbasierten Sicherheitsmodell, automatische Speicherverwaltung und native Web-Services-Unterstützung. Für neue Entwicklung, Microsoft empfiehlt .NET als eine bevorzugte Technologie wegen seiner leistungsstarken verwalteten Laufzeit Umgebung und Dienste.

+1

gegen unmanged Managed ist nicht wirklich ein Unterschied. Sie könnten COM-Komponenten auch in einer .NET-Sprache erstellen lassen. Die Frage an sich ist nicht korrekt, da .NET-Komponenten und COM-Komponenten nicht komplementär sind. –

+2

Sie können regasm verwenden, um jede .NET-Komponente von COM zu verbrauchen; es ist immer noch eine .NET-Komponente ... –

+1

@Mitch: Ich denke, du solltest deine Antwort korrigieren. Noch immer sind viele COM-Komponenten in VB6 geschrieben, die die Referenzzählung verwenden, um die Speicherentsorgung automatisch zu handhaben. Deshalb ist Ihr Punkt COM == unmanaged vs. .NET == managed nicht korrekt. –

5

.NET-Komponenten werden in der CLR ausgeführt, während COM-Komponenten im Wesentlichen native Windows-DLLs sind.

.NET-Komponenten offenbaren weit mehr Metadaten als COM-Komponenten. Dieses Redesign wurde teilweise durchgeführt, um Komponenten interoperabler zu machen. Insbesondere machen .NET-Komponenten keine plattformspezifischen Annahmen über Datenlayout und Aufrufkonventionen.

Siehe Don Box.

+2

Wird die CLR wirklich mit COM geschrieben? Ich weiß, dass viele der Framework-Bibliotheken Wrapper um vorhandene COM-Bibliotheken sind, aber ist die eigentliche Laufzeit selbst COM-Bibliotheken? – sipwiz

+0

@sipwiz Ich habe nicht das ganze [CoreCLR Repo] (https://github.com/dotnet/coreclr) durchgesehen, aber ich habe noch keine COM gefunden. – jrh

+1

@jrh, ich habe die Aussage entfernt. Das basiert auf Don Box's Buch über CLR-Interna, das ich 2005 gelesen habe und von dem es keine Kopie mehr gibt. Es wurde gegen eine sehr frühe Version von .NET geschrieben (* long * vor ".NET Core") und ich vermute, dass einige davon veraltet waren, bevor das Buch überhaupt gedruckt wurde. Es genügt zu sagen, dass .NET nicht mehr COM-basiert ist (wenn es jemals war). – harpo

5

COM-Komponenten sind nicht verwaltete C++ - Code-Komponenten, die entwickelt wurden, um Software auf Binär-Ebene wiederverwendbar zu machen. NET-Komponenten sind ähnlich, obwohl 1) sie in CLR-Sprachen erstellt werden können, während COM-Komponenten nur mit C++ erstellt werden können 2) Sie sollen unter einer verwalteten Laufzeit ausgeführt werden. Ich denke, das sind wesentliche Unterschiede.

EDIT:

C++ ist die "natürliche" Sprache in COM, aber COM-Komponenten können in vielen Sprachen erstellt werden. Danke für die Kommentare Leute.

+3

Das ist nicht ganz richtig. COM-Komponenten können in vielen verschiedenen Sprachen erstellt werden, darunter C++ -, VB- und .NET-Sprachen wie C# oder VB.Net –

+0

VB? Ich benutze das seit 5.0 Tagen nicht, aber das mag wahr sein. Wie kann VB diese Zeiger-zu-Zeiger-Parameter für einige COM-Funktionen behandeln? –

+1

divo ich recherchiert und du hast recht;) –

Verwandte Themen