<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Component_Object_Model</id>
	<title>Component Object Model - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Component_Object_Model"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Component_Object_Model&amp;action=history"/>
	<updated>2026-05-16T18:12:28Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=Component_Object_Model&amp;diff=31477&amp;oldid=prev</id>
		<title>imported&gt;ⵓ: ⇄; •2 externe Links geändert• 🌐︎</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Component_Object_Model&amp;diff=31477&amp;oldid=prev"/>
		<updated>2026-03-05T15:06:29Z</updated>

		<summary type="html">&lt;p&gt;&lt;a href=&quot;/index.php?title=Benutzer:%E2%B5%93/ARreplace&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Benutzer:ⵓ/ARreplace (Seite nicht vorhanden)&quot;&gt;⇄&lt;/a&gt;; •2 externe Links geändert• &lt;a href=&quot;/index.php?title=Benutzer:%E2%B5%93/externalURLform&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Benutzer:ⵓ/externalURLform (Seite nicht vorhanden)&quot;&gt;🌐︎&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Das &amp;#039;&amp;#039;&amp;#039;Component Object Model&amp;#039;&amp;#039;&amp;#039; [{{IPA|kəmˈpoʊnənt ˈɒbdʒɪkt ˈmɒdl}}] (abgekürzt &amp;#039;&amp;#039;&amp;#039;COM&amp;#039;&amp;#039;&amp;#039;) ist eine von [[Microsoft]] entwickelte Technik zur [[Interprozesskommunikation]] unter [[Windows]]. COM-Komponenten können sowohl in Form von [[Dynamic Link Library|Laufzeitmodulen]] (DLLs) als auch als ausführbare Programme umgesetzt sein. COM soll eine leichte Wiederverwendung von bereits geschriebenem Programmcode ermöglichen, zum Teil auch über Betriebssystemgrenzen hinweg. COM-Komponenten können unabhängig von der Programmiersprache eingesetzt werden.&lt;br /&gt;
&lt;br /&gt;
Das Component Object Model wurde von Microsoft 1992 mit der grafischen Benutzeroberfläche [[Windows 3.1]] eingeführt.&lt;br /&gt;
&lt;br /&gt;
== Architektur ==&lt;br /&gt;
COM basiert auf dem [[Client-Server-Modell]]. Ein COM-Client erzeugt eine COM-Komponente in einem sogenannten COM-Server und nutzt die Funktionalität des Objektes über COM-Schnittstellen. Der Zugriff auf Objekte wird innerhalb eines Prozesses durch sogenannte COM-Apartments synchronisiert.&lt;br /&gt;
&lt;br /&gt;
=== COM-Server ===&lt;br /&gt;
Unter einem COM-Server versteht man ein Laufzeitmodul ([[Dynamic Link Library]]) oder ein ausführbares Programm, das in einer COM-unterstützenden Programmiersprache erstellt wurde und COM-Komponenten anbietet und erstellen kann. Es gibt drei Typen von COM-Servern:&lt;br /&gt;
&lt;br /&gt;
==== In-process-Server ====&lt;br /&gt;
Im Falle des &amp;#039;&amp;#039;In-process-Servers&amp;#039;&amp;#039; ist die COM-Komponente in einer [[Dynamic Link Library|DLL]] implementiert (sie tragen unter Windows oft die Dateiendung &amp;#039;&amp;#039;[[OCX]]&amp;#039;&amp;#039;). Diese DLLs müssen die Funktionen &amp;lt;code&amp;gt;DllGetClassObject()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;DllCanUnloadNow()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;DllRegisterServer()&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;DllUnregisterServer()&amp;lt;/code&amp;gt; exportieren.&lt;br /&gt;
Wird eine COM-Komponente eines In-process-Servers erzeugt, so wird der zugehörige Server (ein Server kann mehrere COM-Komponenten anbieten) in den [[Prozess (Informatik)|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 möglich ist.&lt;br /&gt;
[[ActiveX]] verwendet dieses Modell.&lt;br /&gt;
&lt;br /&gt;
==== Local Server ====&lt;br /&gt;
&amp;#039;&amp;#039;Local Server&amp;#039;&amp;#039; sind unter Windows ausführbare Programme, die COM-Komponenten implementieren. Bei der Erzeugung einer COM-Komponente wird dieses Programm gestartet (sofern es nicht schon läuft) – dies bedeutet, dass ein ausführbares 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 müssen und dann viele Clients bedienen können, was weniger Speicherplatz belegt. Zudem lassen sich so recht leicht Datenzugriffe auf einen gemeinsamen Datenbestand synchronisiert von mehreren laufenden Clients durchführen (wie zum Beispiel in [[Microsoft Outlook]]). Die Zugriffe über RPC sind allerdings langsamer.&lt;br /&gt;
&lt;br /&gt;
==== Remote Server ====&lt;br /&gt;
Befinden sich Server und Client in einem [[Rechnernetz]], so kommt [[Distributed Component Object Model|DCOM]] (&amp;#039;&amp;#039;Distributed COM&amp;#039;&amp;#039;) zum Einsatz. Der Einsatz von DCOM ermöglicht grundsätzlich den Betrieb von Server und Client auf unterschiedlichen Betriebssystemen.&lt;br /&gt;
&lt;br /&gt;
DCOM benutzt im Gegensatz zum Local Server ein vollständig 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 zusätzlich noch durch den vorgeschalteten [[Protokollstack]].&lt;br /&gt;
&lt;br /&gt;
=== COM-Schnittstelle ===&lt;br /&gt;
Die COM-Schnittstelle dient der Kommunikation zwischen Client und Server. Eine COM-Komponente kann dazu über allgemein definierte und vorgegebene Schnittstellen (zum Beispiel IUnknown, IDispatch) sowie über spezielle Schnittstellen angesprochen werden.&lt;br /&gt;
&lt;br /&gt;
Jede Schnittstelle hat eine weltweit eindeutige Identifikationsnummer, die [[Globally Unique Identifier|GUID]] (&amp;#039;&amp;#039;Globally Unique Identifier&amp;#039;&amp;#039;). Dadurch können auch mehrere Schnittstellen mit demselben Namen existieren (aber nicht mit derselben GUID).&lt;br /&gt;
&lt;br /&gt;
Um eine programmiersprachenübergreifende Client/Server-Kommunikation zu ermöglichen, findet an der Schnittstelle das sogenannte &amp;#039;&amp;#039;[[Marshalling]]&amp;#039;&amp;#039; statt, das die auszutauschenden Daten in eine vordefinierte Binärrepräsentation wandelt.&lt;br /&gt;
&lt;br /&gt;
Eine [[Schnittstelle (Objektorientierung)|Schnittstelle]] erfüllt die Funktion einer [[Abstrakte Klasse|abstrakten Klasse]], die lediglich virtuelle Elementfunktionen enthält, die (wegen der Trennung von Deklaration und Implementierung) in der [[VTable]] alle auf 0 gesetzt werden. Die C-Version einer Schnittstelle ist entsprechend eine [[Struct|Struktur]], die [[Funktionszeiger]] enthält. Die erzeugten COM-Objekte nutzt man dabei über [[Zeiger (Informatik)|Zeiger]] auf deren Schnittstellen.&lt;br /&gt;
&lt;br /&gt;
Wenn ein COM-Objekt eine Schnittstelle implementiert, muss es alle Methoden der Schnittstelle überschreiben, also die VTable füllen. Dabei sind mindestens die drei Methoden von &amp;lt;code&amp;gt;IUnknown&amp;lt;/code&amp;gt; zu implementieren, die für das Lebenszyklusmanagement zuständig sind und eventuell vorhandene, weitere implementierte Schnittstellen offenlegen.&lt;br /&gt;
&lt;br /&gt;
Eine Schnittstelle sieht in der für COM-Komponenten nutzbaren [[Interface Definition Language|IDL]] (&amp;#039;&amp;#039;Interface Definition Language&amp;#039;&amp;#039;) wie folgt aus (als Beispiel dient das Interface &amp;lt;code&amp;gt;IUnknown&amp;lt;/code&amp;gt;):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;idl&amp;quot;&amp;gt;&lt;br /&gt;
// Standardschnittstelle aller COM-Komponenten&lt;br /&gt;
[&lt;br /&gt;
    object,&lt;br /&gt;
    uuid(00000000-0000-0000-C000-000000000046)&lt;br /&gt;
]&lt;br /&gt;
interface IUnknown {&lt;br /&gt;
    [restricted]&lt;br /&gt;
    HRESULT _stdcall QueryInterface([in] GUID* rrid, [out] void** ppvObj);&lt;br /&gt;
    [restricted]&lt;br /&gt;
    unsigned long _stdcall AddRef();&lt;br /&gt;
    [restricted]&lt;br /&gt;
    unsigned long _stdcall Release();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Jede Schnittstelle muss über eine Schnittstellen-Vererbung die Funktionen der hier gezeigten Schnittstelle &amp;lt;code&amp;gt;IUnknown&amp;lt;/code&amp;gt; definieren, da dieses die grundlegenden Funktionen für COM implementiert. Eine weitere [[Vererbung (Programmierung)|Vererbung]] der Schnittstellendefinitionen ist möglich.&lt;br /&gt;
&lt;br /&gt;
Da Programmiersprachen wie [[Visual Basic Script]] keine Typen kennen, hat Microsoft eine weitere Möglichkeit entwickelt, Funktionen aus COM-Schnittstellen aufzurufen. Für diese Möglichkeit muss die Schnittstelle die Funktionen der Schnittstelle &amp;lt;code&amp;gt;IDispatch&amp;lt;/code&amp;gt; definieren. Dies ermöglicht es, eine COM-Komponente über &amp;lt;code&amp;gt;IDispatch.Invoke()&amp;lt;/code&amp;gt; anzusprechen, ohne dass der COM-Client die [[Typbibliothek]] des Servers kennen muss. Da der Zugriff über das Dispatch-Interface sehr viel langsamer als der Zugriff über ein typisiertes Interface ist, wird oft beides implementiert (&amp;#039;&amp;#039;Dual Interface&amp;#039;&amp;#039;), so dass bei Programmiersprachen, die [[Zeiger (Informatik)|Zeiger]] beherrschen, beide Zugriffsmöglichkeiten zur Verfügung stehen.&lt;br /&gt;
&lt;br /&gt;
=== COM-Komponente ===&lt;br /&gt;
Eine COM-Komponente bietet die aufrufbaren Funktionen über eine oder mehrere COM-Schnittstellen an. Die Erzeugung des Objektes erfolgt durch die Implementierung von &amp;lt;code&amp;gt;IClassFactory.CreateInstance()&amp;lt;/code&amp;gt; im COM-Server.&lt;br /&gt;
&lt;br /&gt;
Die Lebensdauer eines Objektes wird mittels [[Referenzzählung]] gesteuert. Eine COM-Komponente lebt nur so lange, wie die Differenz der Aufrufe von &amp;lt;code&amp;gt;AddRef()&amp;lt;/code&amp;gt; (am Beginn der Verwendung einer Instanz) und &amp;lt;code&amp;gt;Release()&amp;lt;/code&amp;gt; (Freigabe nach Verwendung der Instanz) nicht 0 ergibt.&lt;br /&gt;
&lt;br /&gt;
Eine COM-Komponente kann mehrere Schnittstellen anbieten. Dies ist in bestimmten Situationen auch notwendig, um ein Programm erweitern zu können, ohne andere Programme neu kompilieren zu müssen, denn der Compiler kodiert die aus der VTable gelesenen Einsprungadressen der vom Client aufgerufenen Funktionen unter bestimmten Umständen fest. Wird die Schnittstelle einer Komponente später geändert, kann sich die Einsprungadresse ändern, was die Funktionstüchtigkeit des Clients beeinträchtigen würde. Zur Erweiterung der Serverfunktionalität wird also stattdessen eine weitere Schnittstelle implementiert.&lt;br /&gt;
&lt;br /&gt;
Eine Vererbung von COM-Komponenten (&amp;#039;&amp;#039;Aggregation&amp;#039;&amp;#039;) ist durch die Anforderungen der Binärkompatibilität nur in wenigen Programmiersprachen möglich. Dazu wird die zu vererbende Komponente über explizite Durchleitung der Schnittstellen über die erbende Komponente veröffentlicht.&amp;lt;ref&amp;gt;{{Internetquelle |url=http://msdn.microsoft.com/de-de/library/xfb1zk2x(VS.80).aspx |titel=COM_INTERFACE_ENTRY Macros |archiv-url=https://archive.today/20130128143928/http://msdn.microsoft.com/de-de/library/xfb1zk2x(VS.80).aspx |abruf=2023-07-01|archiv-datum=2013-01-28|abruf-verborgen=1}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== COM-Client ===&lt;br /&gt;
Der Client ist das Programm, das&lt;br /&gt;
* möglicherweise ein Objekt einer COM-Komponente über einen COM-Server erzeugt und&lt;br /&gt;
* die von der COM-Komponente angebotenen Funktionen benutzt.&lt;br /&gt;
Der Client kennt die Funktionen, die von der COM-Komponente angeboten werden, da diese in den entsprechenden COM-Schnittstellen deklariert sind. Die Veröffentlichung von Schnittstellen erfolgt entweder über Typbibliotheken oder Beschreibungen in der [[Interface Definition Language|IDL]] (&amp;#039;&amp;#039;Interface Definition Language&amp;#039;&amp;#039;).&lt;br /&gt;
&lt;br /&gt;
=== Apartments ===&lt;br /&gt;
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 können auf jedem Objekt beliebig viele Aufrufe gleichzeitig ausführen.&lt;br /&gt;
&lt;br /&gt;
Geschieht ein Aufruf im gleichen Apartment zwischen verschiedenen Objekten, ist kein Marshalling erforderlich. Wird jedoch eine Schnittstelle über Apartmentgrenzen hinweg benutzt, muss ein Marshalling erfolgen.&lt;br /&gt;
&lt;br /&gt;
Jeder Thread, der COM verwenden möchte, muss sich vor der ersten Verwendung einer COM-Funktionalität einem Apartment zuordnen (MTA) oder ein neues Apartment erstellen (STA). Dies geschieht über die Funktion &amp;lt;code&amp;gt;CoInitialize()&amp;lt;/code&amp;gt;. Programmiersprachen mit integrierter COM-Unterstützung (zum Beispiel VB6 und die meisten [[.Net-Framework]]-Sprachen) führen diese Zuordnung oft automatisch durch.&lt;br /&gt;
&lt;br /&gt;
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 über Prozessgrenzen hinweg liegen die beiden Objekte immer in verschiedenen Apartments. Die Zuordnung zu einem Apartment kann während der Lebensdauer des Objektes nicht geändert werden.&lt;br /&gt;
&lt;br /&gt;
Es gibt drei Arten von Apartments:&amp;lt;ref&amp;gt;{{Internetquelle |url=http://www.codeguru.com/Cpp/COM-Tech/activex/apts/article.php/c5529/ |titel=Understanding COM Apartments, Part I |archiv-url=https://archive.today/20120728191235/http://www.codeguru.com/Cpp/COM-Tech/activex/apts/article.php/c5529/ |abruf=2023-07-01|archiv-datum=2012-07-28|abruf-verborgen=1}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
* Single Threaded Apartments (STA) besitzen genau einen Thread und beliebig viele Objekte. Es können 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 können. 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.&lt;br /&gt;
* Multi Threaded Apartments (MTA) besitzen beliebig viele Threads. Es gibt in einem Prozess allerdings maximal ein MTA. Dadurch können 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.&lt;br /&gt;
* Neutral Threaded Apartments (NTA) haben keine Threadaffinität. Es gibt in einem Prozess allerdings maximal ein NTA. Jedes Objekt in einem NTA kann von einem STA/MTA Apartment ohne Threadübergang aufgerufen werden. Der Thread wird also kurzzeitig in das NTA ausgeliehen, um damit aus Performancegründen das Marshalling zu überspringen. Neutral Threaded Apartments wurde mit Windows 2000 eingeführt, um die Vorzüge von MTA (meist kein Marshalling notwendig) mit den Vorzügen von STA (keine threadsichere Implementierung notwendig) zu vereinen.&lt;br /&gt;
&lt;br /&gt;
== Funktionalität ==&lt;br /&gt;
Durch den Einsatz von COM gibt es die Möglichkeiten&lt;br /&gt;
* sprachunabhängig,&lt;br /&gt;
* versionsunabhängig,&lt;br /&gt;
* plattformunabhängig,&lt;br /&gt;
* objektorientiert,&lt;br /&gt;
* ortsunabhängig,&lt;br /&gt;
* automatisierend&lt;br /&gt;
zu programmieren.&lt;br /&gt;
Viele der Funktionen des „Windows Platform [[Software Development Kit|SDKs]]“ sind über COM zugänglich. COM ist die Basis, auf der [[Object Linking and Embedding|OLE-Automation]] und [[ActiveX]] aufbauen. Mit der Einführung des [[.Net-Framework|.NET]]-Frameworks verfolgte Microsoft allerdings die Strategie, COM unter Windows durch dieses Framework abzulösen. Im Folgenden werden die einzelnen Punkte der Aufzählung genauer erläutert.&lt;br /&gt;
&lt;br /&gt;
=== Sprachunabhängigkeit ===&lt;br /&gt;
COM-Komponenten sind unabhängig von der Programmiersprache. COM unterstützt den sogenannten [[Binärstandard]]. Die erzeugte Binärdatei stellt einerseits die implementierten Funktionen zur Verfügung und andererseits eine [[Schnittstelle (Objektorientierung)|Schnittstelle]], die diese Funktionen aufzeigt. Mit Hilfe der Schnittstelle ist es möglich, von anderen Programmen aus die Funktionen zu verwenden. Dabei wird mit Konzepten aus dem Bereich [[Verteiltes System|Verteilte Systeme]] gearbeitet.&lt;br /&gt;
&lt;br /&gt;
=== Versionsunabhängigkeit ===&lt;br /&gt;
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 herstellerübergreifende Softwarekomponenten mit weiteren Funktionen ausstattet. Dadurch kann zwar die eigene Software erweitert werden, jedoch besteht die Gefahr, dass andere Software, die ebenfalls die herstellerübergreifenden Komponenten verwendet, nicht mehr funktionsfähig bleibt.&lt;br /&gt;
&lt;br /&gt;
COM bietet eine robuste Möglichkeit an, um eine Softwarekomponente mit neuen Funktionen zu erweitern. Dies wird dadurch ermöglicht, dass mehrere Schnittstellen in einer [[Header-Datei]] zusammengefasst werden können. Der folgende [[C++]]-Programmcode verdeutlicht dies:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
//&lt;br /&gt;
// Interface mathematik.h&lt;br /&gt;
//&lt;br /&gt;
class IStandardMathFunctions : public IUnknown&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
    STDMETHOD(Addieren)(long, long, long*)&lt;br /&gt;
    STDMETHOD(Subtrahieren)(long, long, long*)&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
class IAdvancedMathFunctions : public IUnknown&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
    STDMETHOD(Fibonacci)(short, long*)&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Diese [[Header-Datei]] namens &amp;lt;code&amp;gt;mathematik.h&amp;lt;/code&amp;gt; enthält zwei Schnittstellen. Die erste Schnittstelle könnte beispielsweise die herstellerübergreifenden Funktionen anbieten, die von verschiedenen Programmen verwendet werden. Durch die zweite Schnittstelle &amp;lt;code&amp;gt;IAdvancedMathFunctions&amp;lt;/code&amp;gt; wird diese Softwarekomponente erweitert. Weitere Schnittstellen können jederzeit hinzugefügt werden. Die alten Schnittstellen und darin enthaltenen Funktionen gehen dabei nicht verloren. Das Hinzufügen neuer Schnittstellen statt des Veränderns derselben ist so die von Microsoft gedachte Form, Softwarekomponenten zu erweitern, da so keine Inkonsistenzen entstehen.&lt;br /&gt;
&lt;br /&gt;
=== Plattformunabhängigkeit ===&lt;br /&gt;
x64-Applikationen können dank Marshalling auf 32-bittige COM-Server zugreifen (und umgekehrt). Der COM-Server muss dann in einem eigenen Prozess laufen und seine Objekte können demnach nicht als In-process-Server instanziiert werden. COM-Applikationen sind jedoch fast ausschließlich auf die Windows-Betriebssystemfamilie und von dieser unterstützte Hardware angewiesen, eine Plattformunabhängigkeit war konzipiert&amp;lt;ref&amp;gt;{{Internetquelle |autor=Christian Gross |url=https://msdn.microsoft.com/en-us/library/aa260790(v=vs.60).aspx |titel=Building COM Components on UNIX |hrsg=Microsoft |datum=1998-07 |zugriff=2016-05-29 | sprache=en}}&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;{{Internetquelle |autor=Kersten Auel |url=https://www.heise.de/newsticker/meldung/DCOM-fuer-Unix-jetzt-von-der-Open-Group-11429.html |titel=DCOM für Unix: jetzt von der Open Group |hrsg=Heise Medien |datum=1999-03-08 |zugriff=2016-05-29}}&amp;lt;/ref&amp;gt;, wurde aber wohl nur in wenigen Ausnahmefällen realisiert.&lt;br /&gt;
&lt;br /&gt;
=== Objektorientierung ===&lt;br /&gt;
Beim Einsatz von COM wird &amp;#039;&amp;#039;[[Objektorientierte Programmierung|objektorientiert]]&amp;#039;&amp;#039; gearbeitet. Trotzdem können COM-Komponenten auch zum Beispiel in C erstellt und genutzt werden, da die [[Schnittstelle (Objektorientierung)|Schnittstellen]] tatsächlich eine Sammlung von [[Funktionszeiger]]n sind ([[abstrakte Klasse]] in [[C++]], [[struct]] in [[C (Programmiersprache)|C]]).&lt;br /&gt;
&lt;br /&gt;
=== Ortsunabhängigkeit ===&lt;br /&gt;
COM ist &amp;#039;&amp;#039;ortsunabhängig&amp;#039;&amp;#039;, d.&amp;amp;nbsp;h., dass die einzelnen COM-Komponenten an einer zentralen Stelle &amp;#039;&amp;#039;([[Registrierungsdatenbank]])&amp;#039;&amp;#039; angemeldet werden und so der Zugriff auf die Komponenten unabhängig von ihrem eigentlichen Ort erfolgen kann.&lt;br /&gt;
&lt;br /&gt;
{{Siehe auch|Ortstransparenz}}&lt;br /&gt;
&lt;br /&gt;
=== Automatisierung ===&lt;br /&gt;
Das Steuern von Anwendungen über COM-Schnittstellen wird als Automatisierung bezeichnet. Von dieser Anwendungsmöglichkeit wird häufig im Rahmen von OLE ([[Object Linking and Embedding]]) Gebrauch gemacht.&lt;br /&gt;
&lt;br /&gt;
== Sicherheit ==&lt;br /&gt;
Durch eine Sicherheitslücke in der RPC-Implementierung von DCOM wurde die Angriffsweise des bekannten Wurms [[W32.Blaster]] möglich.&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [[Object Linking and Embedding]]&lt;br /&gt;
* [[Objektorientierte Programmierung]]&lt;br /&gt;
&lt;br /&gt;
== Literatur ==&lt;br /&gt;
* Peter Loos: &amp;#039;&amp;#039;Go to COM. Das Objektmodell im Detail betrachtet&amp;#039;&amp;#039;. 1. Auflage. Addison-Wesley, 2000, ISBN 978-3-8273-1678-3&lt;br /&gt;
* Olaf Zwintzscher: &amp;#039;&amp;#039;Software-Komponenten im Überblick. Einführung, Klassifizierung &amp;amp; Vergleich von JavaBeans, EJB, COM+, .Net, CORBA, UML 2.&amp;#039;&amp;#039; W3L, Herdecke 2005, ISBN 3-937137-60-2&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* &amp;#039;&amp;#039;[https://learn.microsoft.com/en-us/windows/win32/com/component-object-model--com--portal Component Object Model (COM)]&amp;#039;&amp;#039; Microsoft&lt;br /&gt;
&lt;br /&gt;
== Einzelnachweise ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Normdaten |TYP=s |GND=4489599-9 |LCCN=sh98001683}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Schnittstelle (Software)]]&amp;lt;!-- Binärschnittstelle --&amp;gt;&lt;/div&gt;</summary>
		<author><name>imported&gt;ⵓ</name></author>
	</entry>
</feed>