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.
13
Antworten:
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.QueryInterface
ist 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.
quelle
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
quelle
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)).
quelle
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.
quelle
Das Folgende könnte nützlich sein COM-ÜbersichtM:
http://www.youtube.com/watch?v=-uodiz25YNE
http://progtutorials.tripod.com/COM.htm
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
quelle