Frage

Ich denke COM.But ich lernen gehört, dass Microsoft .NET als Alternative zu COM gestartet. So lohnt es sich, COM zu lernen? tatsächlich begann ich COM für UMDF Gerätetreiber zu lernen. Gibt es eine andere Möglichkeit, um die Arbeit an UMDF außer COM?

War es hilfreich?

Lösung

UMDF ist ein Framework Benutzermodus-Gerätetreiber zu entwickeln. Ich denke, eine wichtige Voraussetzung für einen Gerätetreiber ist: Last schnell. Ich will nicht nur meine Startzeiten verzögern, weil ich ein flippiges Gerätetreiber, die das .NET Framework (preJITed aber dennoch) zu laden und JIT hat.

Natürlich können Sie aufgebläht com Bibliotheken entwickeln, sondern durch kompetente sein Sie es vermeiden können. Sie können nicht vermeiden .NET-Laufzeit.

Also selbst wenn UMDF für .NET Entwicklung erlaubt ich an diesem Zeitpunkt nicht Gerätetreiber geschrieben werden sollen in .NET würde.

Verstehen Sie mich nicht falsch. Ich liebe .NET. Ich glaube einfach nicht, es mischt, die gut mit Gerätetreibern, auch wenn wir über Usermode-Treiber sprechen.

Wenn Sie im COM suchen Ich denke, es hilft zu verstehen, warum es entwickelt wurde: interopability zwischen Komponenten in verschiedenen Umgebungen entwickelt bereitzustellen. Das war in den 80er Jahren. Jetzt haben die Menschen über COM über die Jahre beschwert, aber es ist eigentlich sehr erfolgreich dabei. Es gab einige Fehler bei dem Bereitstellungsmodell von COM (dh die Registrierung Abhängigkeit) und andere interessante Design-Entscheidungen, die Entwickler ihre Köpfe kratzen gemacht haben. Allerdings ist der Kern von COM (dh IUnknown) noch IMO klingen.

Andere Tipps

COM ist alt, langweilig und frustrierend. Ich glaube nicht, dass jemand hat mit COM jemals genossen arbeiten. So im Allgemeinen, würde ich empfehlen, gegen es zu lernen, wenn Sie einen wirklich zwingenden Grund haben. Wenn es eine COM-Bibliothek ist da draußen, die Sie verwenden müssen, würde ich stattdessen lernen, wie es zu benutzen, um durch COM-Interop, die Sie zur Arbeit ermöglicht mit COM von .NET.

Um klar zu sein, wurde .NET sehr viel, die für COM ein Ersatz zu sein. Und das gut funktioniert, es war sehr erfolgreich. Aber COM ist überall in Windows können Sie nicht einen Stock in einem typischen Programm schütteln und nicht in COM irgendwo laufen. Das beginnt mit dem ersten Stück Code in einem beliebigen .NET GUI-Programm, [STAThread].

Es gibt viele, viele Dinge in Windows, die den freundlichen .NET-Wrapper ist noch nicht gekommen. Das ist nicht immer erforderlich ist, muss die CLR eine hervorragende Unterstützung für COM-Interop. Ganz sichtbar aus dem Dialogfeld Verweis hinzufügen, wird die Registerkarte COM mit Leckereien gefüllt. Aber was Sie in dieser Liste sehen, sind Komponenten, die speziell dazu entworfen wurden leicht von jeder Laufzeitumgebung zu verwenden sein. Sie implementieren eine Teilmenge von COM "OLE Automation" genannt.

ist Automation eine sehr eingeschränkte Teilmenge, es so gut funktioniert, weil, was Sie tatsächlich tun können, beschränkt ist. Es gibt GoBS jedoch von Code, der nicht über diese Teilmenge passen. Die Art, für die Sie keine Typbibliothek finden. Ohne die Bibliothek Typ sind Sie in .NET geschraubt. Die sichtbarste Komponente mit dieser Frage ist die Schale. Windows Explorer. Schreibe eine Shell-Erweiterung in verwaltetem Code ist hart .

Das Problem ist, dass COM-Schnittstelle Erklärungen ursprünglich auf der Arbeit an einem Compiler gut gestaltet wurden, dass Geräte Mehrfachvererbung. C ++ speziell. Eine .NET-Interface-Deklaration abbildet nicht gut auf eine COM-Schnittstelle, wenn die COM-Schnittstelle von einer anderen COM-Schnittstelle abgeleitet wurde. Der CLR erzeugt die falsche V-Tabelle. Dies berührt in diesem MSDN Magazin-Artikel , wenn auch, dass die Schlussfolgerung des Autors ist ganz falsch.

Sie können Schreib COM-Schnittstelle Erklärungen in einer .NET-Sprache und umzusetzen. Es ist nur, dass Sie bekommen nicht Hilfe überhaupt aus dem SDK. Und das müssen Sie COM ziemlich gut zu wissen, sie richtig zu machen.

UMDF passt dieses Modell auch seine Schnittstellen von IUnknown abgeleitet werden. Keine Art Bibliothek. Kein verwalteten Wrapper, die ich kenne. Sie könnte Code in C # schreiben, aber Sie finden sich alle Schnittstellen Erklärungen schreiben. Realistisch betrachtet, nur C ++ gilt auch hier.

Ja, Sie müssen COM lernen.

COM war nützlich, weil es erlaubt Ihnen eine sprachunabhängige API zu erstellen, die von mehreren Sprachen verbraucht werden könnte. Jetzt ist .net für etwa der sampe Zweck verwendet, obwohl es weniger zugänglich ist. Wenn Sie .net programmieren, viele COM API „nur Arbeit“, obwohl es gut ist, ein grundlegendes Verständnis davon, wie COM arbeitet (so dass COM Anwendungen für die Speicherverwaltung Refcounting, während .net Garbage Collection verwendet).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top