www.wikidata.de-de.nina.az
Das Component Object Model kemˈpoʊnent ˈɒbdʒɪkt ˈmɒdl abgekurzt COM ist eine von Microsoft entwickelte Technik zur Interprozesskommunikation unter Windows COM Komponenten konnen sowohl in Form von Laufzeitmodulen DLLs als auch als ausfuhrbare Programme umgesetzt sein COM soll eine leichte Wiederverwendung von bereits geschriebenem Programmcode ermoglichen zum Teil auch uber Betriebssystemgrenzen hinweg COM Komponenten konnen unabhangig von der Programmiersprache eingesetzt werden Das Component Object Model wurde von Microsoft 1992 mit der grafischen Benutzeroberflache Windows 3 1 eingefuhrt Inhaltsverzeichnis 1 Architektur 1 1 COM Server 1 1 1 In process Server 1 1 2 Local Server 1 1 3 Remote Server 1 2 COM Schnittstelle 1 3 COM Komponente 1 4 COM Client 1 5 Apartments 2 Funktionalitat 2 1 Sprachunabhangigkeit 2 2 Versionsunabhangigkeit 2 3 Plattformunabhangigkeit 2 4 Objektorientierung 2 5 Ortsunabhangigkeit 2 6 Automatisierung 3 Sicherheit 4 Siehe auch 5 Literatur 6 Weblinks 7 EinzelnachweiseArchitektur BearbeitenCOM basiert auf dem Client Server Modell Ein COM Client erzeugt eine COM Komponente in einem sogenannten COM Server und nutzt die Funktionalitat des Objektes uber COM Schnittstellen Der Zugriff auf Objekte wird innerhalb eines Prozesses durch sogenannte COM Apartments synchronisiert COM Server Bearbeiten Unter einem COM Server versteht man ein Laufzeitmodul Dynamic Link Library oder ein ausfuhrbares Programm das in einer COM unterstutzenden Programmiersprache erstellt wurde und COM Komponenten anbietet und erstellen kann Es gibt drei Typen von COM Servern In process Server Bearbeiten Im Falle des In process Servers ist die COM Komponente in einer DLL implementiert sie tragen unter Windows oft die Dateiendung OCX Diese DLLs mussen die Funktionen DllGetClassObject DllCanUnloadNow DllRegisterServer und DllUnregisterServer exportieren Wird eine COM Komponente eines In process Servers erzeugt so wird der zugehorige Server ein Server kann mehrere COM Komponenten anbieten in den Prozess des Clients geladen In process Server sind besonders schnell da der Zugriff auf die Funktionen der COM Komponenten ohne Umwege erfolgt Nachteilig ist dass auf diese Weise jeder Prozess eigenen Speicherplatz mit den benutzten COM Komponenten belegt und keine gemeinsame Speichernutzung moglich ist ActiveX verwendet dieses Modell Local Server Bearbeiten Local Server sind unter Windows ausfuhrbare Programme die COM Komponenten implementieren Bei der Erzeugung einer COM Komponente wird dieses Programm gestartet sofern es nicht schon lauft dies bedeutet dass ein ausfuhrbares Programm vorliegen muss eine DLL kann hier nicht aufgerufen werden Zur Kommunikation zwischen Client und Server wird ein vereinfachtes RPC Protokoll Remote Procedure Call benutzt Local Server haben den Vorteil dass sie nur einmal gestartet werden mussen und dann viele Clients bedienen konnen was weniger Speicherplatz belegt Zudem lassen sich so recht leicht Datenzugriffe auf einen gemeinsamen Datenbestand synchronisiert von mehreren laufenden Clients durchfuhren wie zum Beispiel in Microsoft Outlook Die Zugriffe uber RPC sind allerdings langsamer Remote Server Bearbeiten Befinden sich Server und Client in einem Rechnernetz so kommt DCOM Distributed COM zum Einsatz Der Einsatz von DCOM ermoglicht grundsatzlich den Betrieb von Server und Client auf unterschiedlichen Betriebssystemen DCOM benutzt im Gegensatz zum Local Server ein vollstandig implementiertes RPC was die Aufrufe jedoch auch bei sehr geringer Netzwerkauslastung deutlich verlangsamt Die Implementierung vom DCOM unterscheidet sich von der von COM mit Local Server zusatzlich noch durch den vorgeschalteten Protokollstack COM Schnittstelle Bearbeiten Die COM Schnittstelle dient der Kommunikation zwischen Client und Server Eine COM Komponente kann dazu uber allgemein definierte und vorgegebene Schnittstellen zum Beispiel IUnknown IDispatch sowie uber spezielle Schnittstellen angesprochen werden Jede Schnittstelle hat eine weltweit eindeutige Identifikationsnummer die GUID Globally Unique Identifier Dadurch konnen auch mehrere Schnittstellen mit demselben Namen existieren aber nicht mit derselben GUID Um eine programmiersprachenubergreifende Client Server Kommunikation zu ermoglichen findet an der Schnittstelle das sogenannte Marshalling statt das die auszutauschenden Daten in eine vordefinierte Binarreprasentation wandelt Eine Schnittstelle erfullt die Funktion einer abstrakten Klasse die lediglich virtuelle Elementfunktionen enthalt die wegen der Trennung von Deklaration und Implementierung in der VTable alle auf 0 gesetzt werden Die C Version einer Schnittstelle ist entsprechend eine Struktur die Funktionszeiger enthalt Die erzeugten COM Objekte nutzt man dabei uber Zeiger auf deren Schnittstellen Wenn ein COM Objekt eine Schnittstelle implementiert muss es alle Methoden der Schnittstelle uberschreiben also die VTable fullen Dabei sind mindestens die drei Methoden von IUnknown zu implementieren die fur das Lebenszyklusmanagement zustandig sind und eventuell vorhandene weitere implementierte Schnittstellen offenlegen Eine Schnittstelle sieht in der fur COM Komponenten nutzbaren IDL Interface Definition Language wie folgt aus als Beispiel dient das Interface IUnknown Standardschnittstelle aller COM Komponenten object uuid 00000000 0000 0000 C000 000000000046 interface IUnknown restricted HRESULT stdcall QueryInterface in GUID rrid out void ppvObj restricted unsigned long stdcall AddRef restricted unsigned long stdcall Release Jede Schnittstelle muss uber eine Schnittstellen Vererbung die Funktionen der hier gezeigten Schnittstelle IUnknown definieren da dieses die grundlegenden Funktionen fur COM implementiert Eine weitere Vererbung der Schnittstellendefinitionen ist moglich Da Programmiersprachen wie Visual Basic Script keine Typen kennen hat Microsoft eine weitere Moglichkeit entwickelt Funktionen aus COM Schnittstellen aufzurufen Fur diese Moglichkeit muss die Schnittstelle die Funktionen der Schnittstelle IDispatch definieren Dies ermoglicht es eine COM Komponente uber IDispatch Invoke anzusprechen ohne dass der COM Client die Typbibliothek des Servers kennen muss Da der Zugriff uber das Dispatch Interface sehr viel langsamer als der Zugriff uber ein typisiertes Interface ist wird oft beides implementiert Dual Interface so dass bei Programmiersprachen die Zeiger beherrschen beide Zugriffsmoglichkeiten zur Verfugung stehen COM Komponente Bearbeiten Eine COM Komponente bietet die aufrufbaren Funktionen uber eine oder mehrere COM Schnittstellen an Die Erzeugung des Objektes erfolgt durch die Implementierung von IClassFactory CreateInstance im COM Server Die Lebensdauer eines Objektes wird mittels Referenzzahlung gesteuert Eine COM Komponente lebt nur so lange wie die Differenz der Aufrufe von AddRef am Beginn der Verwendung einer Instanz und Release Freigabe nach Verwendung der Instanz nicht 0 ergibt Eine COM Komponente kann mehrere Schnittstellen anbieten Dies ist in bestimmten Situationen auch notwendig um ein Programm erweitern zu konnen ohne andere Programme neu kompilieren zu mussen denn der Compiler kodiert die aus der VTable gelesenen Einsprungadressen der vom Client aufgerufenen Funktionen unter bestimmten Umstanden fest Wird die Schnittstelle einer Komponente spater geandert kann sich die Einsprungadresse andern was die Funktionstuchtigkeit des Clients beeintrachtigen wurde Zur Erweiterung der Serverfunktionalitat wird also stattdessen eine weitere Schnittstelle implementiert Eine Vererbung von COM Komponenten Aggregation ist durch die Anforderungen der Binarkompatibilitat nur in wenigen Programmiersprachen moglich Dazu wird die zu vererbende Komponente uber explizite Durchleitung der Schnittstellen uber die erbende Komponente veroffentlicht 1 COM Client Bearbeiten Der Client ist das Programm das moglicherweise ein Objekt einer COM Komponente uber einen COM Server erzeugt und die von der COM Komponente angebotenen Funktionen benutzt Der Client kennt die Funktionen die von der COM Komponente angeboten werden da diese in den entsprechenden COM Schnittstellen deklariert sind Die Veroffentlichung von Schnittstellen erfolgt entweder uber Typbibliotheken oder Beschreibungen in der IDL Interface Definition Language Apartments Bearbeiten COM Objekte werden bei der Erzeugung immer einem sogenannten Apartment zugeordnet Dabei handelt es sich um transparente Rahmen die zur Synchronisierung von Methodenaufrufen mehrerer Objekte dienen die mit unterschiedlichen Anforderungen an die Threadsicherheit arbeiten Wird COM nicht mitgeteilt dass eine entsprechende Komponente threadsicher ist wird COM nur einen Aufruf gleichzeitig an ein Objekt erlauben Threadsichere Komponenten konnen auf jedem Objekt beliebig viele Aufrufe gleichzeitig ausfuhren Geschieht ein Aufruf im gleichen Apartment zwischen verschiedenen Objekten ist kein Marshalling erforderlich Wird jedoch eine Schnittstelle uber Apartmentgrenzen hinweg benutzt muss ein Marshalling erfolgen Jeder Thread der COM verwenden mochte muss sich vor der ersten Verwendung einer COM Funktionalitat einem Apartment zuordnen MTA oder ein neues Apartment erstellen STA Dies geschieht uber die Funktion CoInitialize Programmiersprachen mit integrierter COM Unterstutzung zum Beispiel VB6 und die meisten Net Framework Sprachen fuhren diese Zuordnung oft automatisch durch Jede COM Komponente wird bei Erzeugung einem Apartment zugeordnet Falls die Apartment Anforderungen der erzeugten Komponente zum Apartment des erzeugenden Threads passen wird das Objekt dem gleichen Apartment zugeordnet Bei Aufrufen uber Prozessgrenzen hinweg liegen die beiden Objekte immer in verschiedenen Apartments Die Zuordnung zu einem Apartment kann wahrend der Lebensdauer des Objektes nicht geandert werden Es gibt drei Arten von Apartments 2 Single Threaded Apartments STA besitzen genau einen Thread und beliebig viele Objekte Es konnen beliebig viele STAs in einem Prozess existieren Es erfolgt nur ein Aufruf gleichzeitig an das aufzurufende Objekt Die restlichen Aufrufe warten in einer Warteschlange auf die Freigabe des Apartment Threads Dies impliziert dass zwei Objekte in demselben STA auch von zwei verschiedenen Clients nicht parallel aufgerufen werden konnen Als Besonderheit wird das erste in einem Prozess initialisierte STA automatisch zum Main STA Pro Prozess gibt es nur genau ein Main STA alle Objekte die keine explizite Anforderung an das Apartment stellen werden in diesem erzeugt Multi Threaded Apartments MTA besitzen beliebig viele Threads Es gibt in einem Prozess allerdings maximal ein MTA Dadurch konnen von mehreren Clients gleichzeitig Aufrufe an das gleiche oder auch verschiedene Objekte erfolgen Die Anforderungen an die Implementierung der Komponenten sind wegen der notwendigen Threadsicherheit und Reentranz sehr hoch Neutral Threaded Apartments NTA haben keine Threadaffinitat Es gibt in einem Prozess allerdings maximal ein NTA Jedes Objekt in einem NTA kann von einem STA MTA Apartment ohne Threadubergang aufgerufen werden Der Thread wird also kurzzeitig in das NTA ausgeliehen um damit aus Performancegrunden das Marshalling zu uberspringen Neutral Threaded Apartments wurde mit Windows 2000 eingefuhrt um die Vorzuge von MTA meist kein Marshalling notwendig mit den Vorzugen von STA keine threadsichere Implementierung notwendig zu vereinen Funktionalitat BearbeitenDurch den Einsatz von COM gibt es die Moglichkeiten sprachunabhangig versionsunabhangig plattformunabhangig objektorientiert ortsunabhangig automatisierendzu programmieren Viele der Funktionen des Windows Platform SDKs sind uber COM zuganglich COM ist die Basis auf der OLE Automation und ActiveX aufbauen Mit der Einfuhrung des NET Frameworks verfolgte Microsoft allerdings die Strategie COM unter Windows durch dieses Framework abzulosen Im Folgenden werden die einzelnen Punkte der Aufzahlung genauer erlautert Sprachunabhangigkeit Bearbeiten COM Komponenten sind unabhangig von der Programmiersprache COM unterstutzt den sogenannten Binarstandard Die erzeugte Binardatei stellt einerseits die implementierten Funktionen zur Verfugung und andererseits eine Schnittstelle die diese Funktionen aufzeigt Mit Hilfe der Schnittstelle ist es moglich von anderen Programmen aus die Funktionen zu verwenden Dabei wird mit Konzepten aus dem Bereich Verteilte Systeme gearbeitet Versionsunabhangigkeit Bearbeiten Ein weiterer Vorteil beim Einsatz von COM ist es dass man die Verwaltung von neuen Softwarefeatures einfach in eine bestehende Anwendung integrieren kann Oftmals kann es Probleme geben wenn man herstellerneutrale oder herstellerubergreifende Softwarekomponenten mit weiteren Funktionen ausstattet Dadurch kann zwar die eigene Software erweitert werden jedoch besteht die Gefahr dass andere Software die ebenfalls die herstellerubergreifenden Komponenten verwendet nicht mehr funktionsfahig bleibt COM bietet eine robuste Moglichkeit an um eine Softwarekomponente mit neuen Funktionen zu erweitern Dies wird dadurch ermoglicht dass mehrere Schnittstellen in einer Header Datei zusammengefasst werden konnen Der folgende C Programmcode verdeutlicht dies Interface mathematik h class IStandardMathFunctions public IUnknown public STDMETHOD Addieren long long long STDMETHOD Subtrahieren long long long class IAdvancedMathFunctions public IUnknown public STDMETHOD Fibonacci short long Diese Header Datei namens mathematik h enthalt zwei Schnittstellen Die erste Schnittstelle konnte beispielsweise die herstellerubergreifenden Funktionen anbieten die von verschiedenen Programmen verwendet werden Durch die zweite Schnittstelle IAdvancedMathFunctions wird diese Softwarekomponente erweitert Weitere Schnittstellen konnen jederzeit hinzugefugt werden Die alten Schnittstellen und darin enthaltenen Funktionen gehen dabei nicht verloren Das Hinzufugen neuer Schnittstellen statt des Veranderns derselben ist so die von Microsoft gedachte Form Softwarekomponenten zu erweitern da so keine Inkonsistenzen entstehen Plattformunabhangigkeit Bearbeiten x64 Applikationen konnen dank Marshalling auf 32 bittige COM Server zugreifen und umgekehrt Der COM Server muss dann in einem eigenen Prozess laufen und seine Objekte konnen demnach nicht als In process Server instanziiert werden COM Applikationen sind jedoch fast ausschliesslich auf die Windows Betriebssystemfamilie und von dieser unterstutzte Hardware angewiesen eine Plattformunabhangigkeit war konzipiert 3 4 wurde aber wohl nur in wenigen Ausnahmefallen realisiert Objektorientierung Bearbeiten Beim Einsatz von COM wird objektorientiert gearbeitet Trotzdem konnen COM Komponenten auch zum Beispiel in C erstellt und genutzt werden da die Schnittstellen tatsachlich eine Sammlung von Funktionszeigern sind abstrakte Klasse in C struct in C Ortsunabhangigkeit Bearbeiten COM ist ortsunabhangig d h dass die einzelnen COM Komponenten an einer zentralen Stelle Registrierungsdatenbank angemeldet werden und so der Zugriff auf die Komponenten unabhangig von ihrem eigentlichen Ort erfolgen kann Siehe auch Ortstransparenz Automatisierung Bearbeiten Das Steuern von Anwendungen uber COM Schnittstellen wird als Automatisierung bezeichnet Von dieser Anwendungsmoglichkeit wird haufig im Rahmen von OLE Object Linking and Embedding Gebrauch gemacht Sicherheit BearbeitenDurch eine Sicherheitslucke in der RPC Implementierung von DCOM wurde die Angriffsweise des bekannten Wurms W32 Blaster moglich Siehe auch BearbeitenObject Linking and Embedding Objektorientierte ProgrammierungLiteratur BearbeitenPeter Loos Go to COM Das Objektmodell im Detail betrachtet 1 Auflage Addison Wesley 2000 ISBN 978 3 8273 1678 3 Olaf Zwintzscher Software Komponenten im Uberblick Einfuhrung Klassifizierung amp Vergleich von JavaBeans EJB COM Net CORBA UML 2 W3L Herdecke 2005 ISBN 3 937137 60 2Weblinks BearbeitenComponent Object Model COM MicrosoftEinzelnachweise Bearbeiten COM INTERFACE ENTRY Macros Archiviert vom Original abgerufen am 1 Juli 2023 Understanding COM Apartments Part I Archiviert vom Original abgerufen am 1 Juli 2023 Christian Gross Building COM Components on UNIX Microsoft Juli 1998 abgerufen am 29 Mai 2016 englisch Kersten Auel DCOM fur Unix jetzt von der Open Group Heise Medien 8 Marz 1999 abgerufen am 29 Mai 2016 Abgerufen von https de wikipedia org w index php title Component Object Model amp oldid 235087700