Bester Ort, um Component Object Model zu lernen [geschlossen]

13

Ich muss COM für mein aktuelles Projekt lernen. Ich bin ein Neuling und konnte keine guten Startpunkte für COM finden. Ich habe mir MSDN angeschaut und gegoogelt ... Ich habe einige interessante Artikel auf codeproject.com gefunden, bin aber nicht zufrieden. Warum verwenden wir COM? Warum existiert es? An welchen Orten existiert es? ..... und so weiter. Sagen Sie mir bitte, wo ich Antworten auf diese Fragen finden kann.

Chani
quelle
3
Warum verwenden wir COM? Meist versuchen wir es nicht. An welchen Orten existiert es? Im Allgemeinen schmerzhafte alte Codebasen.
Carson63000
@Carson Actully Ich entwickle eine Überwachungssoftware, bei der ich Werte von "COM" -Objekten abrufen muss. Daher die neu gefundene Quest ..
Chani
1
Wenn ich mich richtig erinnere, waren von den 3 besten Webartikeln auf COM 2 auf MSDN (ein alter Zeitschriftenartikel) und 1 auf CodeProject ... offensichtlich gibt es Hunderte anderer, etwas nützlicherer, also ist es, als würde man eine Nadel im Heuhaufen finden. (und
vielen
@ Carson63000 So wahr, es tut weh ... werde jetzt in einer Ecke weinen.
Evicatos

Antworten:

18
  • Erstens ist COM wie eine objektorientierte Programmierung. COM-Schnittstelle ist eine abstrakte Schnittstelle.
  • COM hat gegenüber dem integrierten OOP jeder Sprache den Vorteil, dass Sie COM-Klassen in verschiedenen Sprachen implementieren und / oder von verschiedenen Compilerversionen kompilieren lassen können, und diese weiterhin in der Lage sind, zusammenzuarbeiten. Dies wird als "Application Binary Interface" (ABI) bezeichnet.
  • COM verwendet die Referenzzählung. Es mag zunächst ärgerlich sein, aber sobald Sie sich mit intelligenten Zeigern vertraut gemacht haben, wird Ihr Leben viel einfacher und Sie werden feststellen, dass das Konzept der Referenzzählung sehr einfach zu verstehen ist.
  • COM verwendet eine seltsame Art der Klassenumwandlung, nämlich "Query Interface".

Das Erlernen von IUnknown ist der erste Schritt.

Eine gute COM-Schnittstelle, die für Anfänger geeignet ist, ist die IStream-Schnittstelle. Sie können COM üben, indem Sie die IStream-Schnittstelle auf verschiedene Arten zum Speichern von Daten implementieren.


Hinzugefügt am 28.09.2012:

Nachdem der COM-Mechanismus erfunden worden war, stellten die Mitarbeiter von Microsoft fest, dass diese Mechanismen ungewöhnliche Programmiertricks ermöglichen, die kein orthodoxes OOP sind. Auf der untersten Ebene IUnknown.QueryInterfaceist nur eine Methode; es kann alles machen. Diese Tricks machen COM für Lernende einschüchternd, da sie die grundlegende Argumentation, die von OOP ausgeliehen werden kann, ungültig machen können.

In der Microsoft-Dokumentation von MSDN wird viel Zeit darauf verwendet, zu erklären, wie diese ungewöhnlichen Tricks Ihren Code beschädigen können.

COM-Designer verwenden das Liskov-Substitutionsprinzip (das "L" in SOLID ), um sicherzustellen, dass die verschiedenen Schnittstellen und die Verwendung von Tricks die grundlegende OOP-Argumentation oder die Programmoperation nicht ungültig machen.

Wenn Ihr Projekt diese Tricks nicht verwendet, ist es in Ordnung, COM nur aus der OOP-Sicht zu sehen. Wenn Ihr Projekt diese Tricks verwendet, müssen Sie COM als selbstmodifizierenden Code anzeigen.

(Witz: Wir mussten so viel Zeit mit L verbringen, dass wir normalerweise die vier anderen Prinzipien ignorieren.)

rwong
quelle
9

Der Hauptgrund für COM besteht darin, eine objektorientierte Kommunikationsschnittstelle zwischen einer Anwendung und anderen Anwendungen und DLLs bereitzustellen, die in unterschiedlichen Speicherbereichen und zwischen Objekten mit unterschiedlichen internen Objektdarstellungen leben können.

Beim Erlernen von COM ist zu beachten, dass C ++ zu der Zeit König war und Anwendungen, die als DLLs bezeichnet wurden, C. Es gab kein gemeinsames ABI (wie @rwong sagt) und COM war die Microsoft-Lösung.

Es lohnt sich wahrscheinlich, einen Blick auf die Active Template Library (ATL) für Visual Studio zu werfen, um die Verwendung von COM zu vereinfachen.

Ein paar Bücher, die ich damals nützlich fand

http://www.amazon.com/Essential-COM-Don-Box/dp/0201634465/ref=sr_1_1?ie=UTF8&qid=1304946825&sr=8-1

http://www.amazon.com/Understanding-ActiveX-OLE-Developers-Technology/dp/1572312165/ref=pd_sim_b_4

hth

daven11
quelle
7

Ich habe COM ursprünglich aus dem Buch Learning DCOM gelernt (DCOM ist nur eine Erweiterung von COM, das Buch handelt hauptsächlich von COM). Es ist über zehn Jahre alt und sollte billig sein, wenn man es gebraucht bekommt (da COM nicht mehr so ​​aktuell ist, auch nicht in der Microsoft-Welt, obwohl es immer noch für Interop verwendet wird).

Der Hauptgrund für die Existenz von COM besteht darin, die komponentenbasierte Entwicklung zu erleichtern. Dies bedeutet im Grunde, dass Sie beim Kompilieren Ihres Codes keine Bibliotheken verknüpfen, sondern auf eine Schnittstelle verweisen (die Beschreibung der Kommunikation mit einer externen Komponente) und eine Implementierung von verwenden das, wenn Sie bereitstellen. Es basiert auf den meisten Technologien von Microsoft.

Das System bietet Unterstützung für einige Funktionen, die vor der Verwaltung noch nicht verfügbar waren (z. B. Referenzzählung und Selbstbeschreibung (über IDispatch)).

Deckard
quelle
5

COM ist ein Standard, der in den 90er Jahren entwickelt wurde, um die Kommunikation zwischen verschiedenen Softwareteilen zu ermöglichen. Am wichtigsten ist der Binärstandard, mit dem eine Software ein Objekt erstellen oder an dieses binden und dieses Interface aufrufen kann. Auf diese Weise können Sie beispielsweise eine DLL in C ++ erstellen, die von einer ASP-Seite (COM Objects) aufgerufen werden kann, oder ein Steuerelement in Delphi erstellen, das Sie in ein VB-Dialogfeld (ActiveX-Steuerelemente) oder in ein Excel-Arbeitsblatt einfügen können. Wenn Sie ein Bild in Word einfügen, wird auch COM verwendet, wodurch eine separate Anwendung in Word eingebettet wird. Weniger beliebt ist DCOM, das entfernte Objekte aufruft. In der Regel gibt es einfachere Möglichkeiten, dies zu tun.

Daher war Com / ActiveX / DCOM vor 10 Jahren bei VB, VBA, C ++ / ATL, Delphi sehr beliebt. Dotnet ist jedoch viel einfacher und C # hat die meisten COM - und VB - Anwendungen ersetzt

Es gibt immer noch viele COM-Schnittstellen, die Sie möglicherweise von einer Dotnet-Anwendung oder Java oder C ++ aufrufen möchten. (Du sagst nicht)

Wenn Sie COM-Schnittstellen aufrufen müssen, ist VB der einfachste Weg, dies zu tun. In Dotnet 4.0 verfügt C # über das dynamische Schlüsselwort, das das Aufrufen von IDispatch-Schnittstellen erheblich vereinfacht. Dies ist wahrscheinlich eine hervorragende Lösung, die Sie sich ansehen sollten.

Wenn Sie viele Details kennen müssen, müssen Sie C ++ und ATL verwenden und die C-APIs wie CoCreateInstance aufrufen. Vermeiden Sie dies, wenn Sie können, da es sich um eine alte Technologie handelt und nicht viel verwendet wird. Halten Sie sich an die obigen Empfehlungen.

Ich bin nicht sicher, welche Überwachungssoftware Sie suchen, aber wahrscheinlich über System.Management-Klassen in dotnet verfügbar.

Richard
quelle
2

Das Folgende könnte nützlich sein COM-ÜbersichtM:

Das erste Video handelt von der allgemeinen Idee, Binärkomponenten zu erstellen, um Codes wiederzuverwenden, die in verschiedenen Sprachen (sprachunabhängig) geschrieben wurden und sich auf verschiedenen Maschinen (Prozessen) befinden (ortsunabhängig / transparent). Diese Technologie wird in einigen Softwarefirmen verwendet, um sich in andere Software (Firmen) zu integrieren, anstatt deren Software zu kaufen und in ihre eigenen einzubetten oder die Codes von Grund auf in ihre Systeme zu schreiben.

Diese Technologie hat drei verschiedene Versionen (Implementierungen):

OLE / COM / DCOM / ActiveX für C ++ - Entwickler (ATL wird verwendet, um die Arbeit des Programmierers zu erleichtern)

JavaBeans / RMI / EJB für Java-Entwickler

CORBA / IIOP

Stellen Sie sich das als eine Technologie vor, die nützlich ist, wenn Sie Ihre Software in Java geschrieben haben und eine Funktionalität hinzufügen möchten, die bereits in einem Paket vorhanden ist, aber in C ++ geschrieben ist und sich möglicherweise sogar auf einer anderen Maschine befindet, die nicht in Ihre lokale Maschine. Wie nennt man "neu", wie macht man Objekte und ruft daraus Methoden auf?

Die folgenden Bücher, die ich bei Leuten gesehen habe, die COM-Codierung durchführen, haben eines davon in ihren Regalen:

  • Entwicklerworkshop zu COM und ATL 3.0

  • Inside Com

  • Wesentliche COM

Mahshid Zeinaly
quelle