https://de.wikipedia.org/w/index.php?action=history&feed=atom&title=Component_Object_Model Component Object Model - Versionsgeschichte 2025-06-05T01:23:11Z Versionsgeschichte dieser Seite in Wikipedia MediaWiki 1.45.0-wmf.3 https://de.wikipedia.org/w/index.php?title=Component_Object_Model&diff=254035767&oldid=prev Schotterebene: Revert - bitte der Belegpflicht nachkommen 2025-03-09T13:28:22Z <p>Revert - bitte der <a href="/wiki/Wikipedia:BEL" class="mw-redirect" title="Wikipedia:BEL">Belegpflicht</a> nachkommen</p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="de"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Nächstältere Version</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Version vom 9. März 2025, 15:28 Uhr</td> </tr><tr> <td colspan="2" class="diff-lineno">Zeile 51:</td> <td colspan="2" class="diff-lineno">Zeile 51:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Jede Schnittstelle muss über eine Schnittstellen-Vererbung die Funktionen der hier gezeigten Schnittstelle &lt;code&gt;IUnknown&lt;/code&gt; definieren, da dieses die grundlegenden Funktionen für COM implementiert. Eine weitere [[Vererbung (Programmierung)|Vererbung]] der Schnittstellendefinitionen ist möglich.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Jede Schnittstelle muss über eine Schnittstellen-Vererbung die Funktionen der hier gezeigten Schnittstelle &lt;code&gt;IUnknown&lt;/code&gt; definieren, da dieses die grundlegenden Funktionen für COM implementiert. Eine weitere [[Vererbung (Programmierung)|Vererbung]] der Schnittstellendefinitionen ist möglich.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>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 &lt;code&gt;IDispatch&lt;/code&gt; definieren. Dies ermöglicht es, eine COM-Komponente über &lt;code&gt;IDispatch.Invoke()&lt;/code&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 (''Dual Interface''), so dass bei Programmiersprachen, die [[Zeiger (Informatik)|Zeiger]] beherrschen<del style="font-weight: bold; text-decoration: none;"> oder die Typbibliotheken nutzen können</del>, beide Zugriffsmöglichkeiten zur Verfügung stehen.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>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 &lt;code&gt;IDispatch&lt;/code&gt; definieren. Dies ermöglicht es, eine COM-Komponente über &lt;code&gt;IDispatch.Invoke()&lt;/code&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 (''Dual Interface''), so dass bei Programmiersprachen, die [[Zeiger (Informatik)|Zeiger]] beherrschen, beide Zugriffsmöglichkeiten zur Verfügung stehen.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>=== COM-Komponente ===</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>=== COM-Komponente ===</div></td> </tr> </table> Schotterebene https://de.wikipedia.org/w/index.php?title=Component_Object_Model&diff=254032876&oldid=prev 84.58.70.28: /* COM-Schnittstelle */ 2025-03-09T12:17:22Z <p><span class="autocomment">COM-Schnittstelle</span></p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="de"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Nächstältere Version</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Version vom 9. März 2025, 14:17 Uhr</td> </tr><tr> <td colspan="2" class="diff-lineno">Zeile 51:</td> <td colspan="2" class="diff-lineno">Zeile 51:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Jede Schnittstelle muss über eine Schnittstellen-Vererbung die Funktionen der hier gezeigten Schnittstelle &lt;code&gt;IUnknown&lt;/code&gt; definieren, da dieses die grundlegenden Funktionen für COM implementiert. Eine weitere [[Vererbung (Programmierung)|Vererbung]] der Schnittstellendefinitionen ist möglich.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Jede Schnittstelle muss über eine Schnittstellen-Vererbung die Funktionen der hier gezeigten Schnittstelle &lt;code&gt;IUnknown&lt;/code&gt; definieren, da dieses die grundlegenden Funktionen für COM implementiert. Eine weitere [[Vererbung (Programmierung)|Vererbung]] der Schnittstellendefinitionen ist möglich.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>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 &lt;code&gt;IDispatch&lt;/code&gt; definieren. Dies ermöglicht es, eine COM-Komponente über &lt;code&gt;IDispatch.Invoke()&lt;/code&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 (''Dual Interface''), so dass bei Programmiersprachen, die [[Zeiger (Informatik)|Zeiger]] beherrschen, beide Zugriffsmöglichkeiten zur Verfügung stehen.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>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 &lt;code&gt;IDispatch&lt;/code&gt; definieren. Dies ermöglicht es, eine COM-Komponente über &lt;code&gt;IDispatch.Invoke()&lt;/code&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 (''Dual Interface''), so dass bei Programmiersprachen, die [[Zeiger (Informatik)|Zeiger]] beherrschen<ins style="font-weight: bold; text-decoration: none;"> oder die Typbibliotheken nutzen können</ins>, beide Zugriffsmöglichkeiten zur Verfügung stehen.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>=== COM-Komponente ===</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>=== COM-Komponente ===</div></td> </tr> </table> 84.58.70.28 https://de.wikipedia.org/w/index.php?title=Component_Object_Model&diff=235087700&oldid=prev Schotterebene: Webarchiv statt toter Link 2023-07-01T12:05:34Z <p>Webarchiv statt toter Link</p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="de"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Nächstältere Version</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Version vom 1. Juli 2023, 14:05 Uhr</td> </tr><tr> <td colspan="2" class="diff-lineno">Zeile 77:</td> <td colspan="2" class="diff-lineno">Zeile 77:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>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.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>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.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Es gibt drei Arten von Apartments:&lt;ref&gt;<del style="font-weight: bold; text-decoration: none;">[</del>http://www.codeguru.com/Cpp/COM-Tech/activex/apts/article.php/c5529/ Understanding COM Apartments, Part I<del style="font-weight: bold; text-decoration: none;">]</del> <del style="font-weight: bold; text-decoration: none;">(CodeGuru)</del>&lt;/ref&gt;</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Es gibt drei Arten von Apartments:&lt;ref&gt;<ins style="font-weight: bold; text-decoration: none;">{{Internetquelle |url=</ins>http://www.codeguru.com/Cpp/COM-Tech/activex/apts/article.php/c5529/ <ins style="font-weight: bold; text-decoration: none;">|titel=</ins>Understanding COM Apartments, Part I <ins style="font-weight: bold; text-decoration: none;">|archiv-url=https://archive.md/20120728191235/http://www.codeguru.com/Cpp/COM-Tech/activex/apts/article.php/c5529/ |abruf=2023-07-01}}</ins>&lt;/ref&gt;</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* 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.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* 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.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* 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.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* 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.</div></td> </tr> </table> Schotterebene https://de.wikipedia.org/w/index.php?title=Component_Object_Model&diff=235087636&oldid=prev Schotterebene: Webarchiv statt toter Link 2023-07-01T12:02:31Z <p>Webarchiv statt toter Link</p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="de"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Nächstältere Version</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Version vom 1. Juli 2023, 14:02 Uhr</td> </tr><tr> <td colspan="2" class="diff-lineno">Zeile 60:</td> <td colspan="2" class="diff-lineno">Zeile 60:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>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.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>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.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Eine Vererbung von COM-Komponenten (''Aggregation'') 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.&lt;ref&gt;<del style="font-weight: bold; text-decoration: none;">[</del>http://msdn.microsoft.com/de-de/library/xfb1zk2x(VS.80).aspx <del style="font-weight: bold; text-decoration: none;">''Com_Interface_Entry</del> Macros (<del style="font-weight: bold; text-decoration: none;">Atl</del>)<del style="font-weight: bold; text-decoration: none;">''</del>.<del style="font-weight: bold; text-decoration: none;">]</del> <del style="font-weight: bold; text-decoration: none;">[[MSDN]]</del>&lt;/ref&gt;</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Eine Vererbung von COM-Komponenten (''Aggregation'') 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.&lt;ref&gt;<ins style="font-weight: bold; text-decoration: none;">{{Internetquelle |url=</ins>http://msdn.microsoft.com/de-de/library/xfb1zk2x(VS.80).aspx <ins style="font-weight: bold; text-decoration: none;">|titel=COM_INTERFACE_ENTRY</ins> Macros <ins style="font-weight: bold; text-decoration: none;">|archiv-url=https://archive.md/20130128143928/http://msdn.microsoft.com/de-de/library/xfb1zk2x</ins>(<ins style="font-weight: bold; text-decoration: none;">VS.80</ins>).<ins style="font-weight: bold; text-decoration: none;">aspx</ins> <ins style="font-weight: bold; text-decoration: none;">|abruf=2023-07-01}}</ins>&lt;/ref&gt;</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>=== COM-Client ===</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>=== COM-Client ===</div></td> </tr> </table> Schotterebene https://de.wikipedia.org/w/index.php?title=Component_Object_Model&diff=232216600&oldid=prev Lofote: /* In-process-Server */ ActiveX 2023-03-26T22:19:35Z <p><span class="autocomment">In-process-Server: </span> ActiveX</p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="de"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Nächstältere Version</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Version vom 27. März 2023, 00:19 Uhr</td> </tr><tr> <td colspan="2" class="diff-lineno">Zeile 12:</td> <td colspan="2" class="diff-lineno">Zeile 12:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Im Falle des ''In-process-Servers'' ist die COM-Komponente in einer [[Dynamic Link Library|DLL]] implementiert (sie tragen unter Windows oft die Dateiendung ''[[OCX]]''). Diese DLLs müssen die Funktionen &lt;code&gt;DllGetClassObject()&lt;/code&gt;, &lt;code&gt;DllCanUnloadNow()&lt;/code&gt;, &lt;code&gt;DllRegisterServer()&lt;/code&gt; und &lt;code&gt;DllUnregisterServer()&lt;/code&gt; exportieren.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Im Falle des ''In-process-Servers'' ist die COM-Komponente in einer [[Dynamic Link Library|DLL]] implementiert (sie tragen unter Windows oft die Dateiendung ''[[OCX]]''). Diese DLLs müssen die Funktionen &lt;code&gt;DllGetClassObject()&lt;/code&gt;, &lt;code&gt;DllCanUnloadNow()&lt;/code&gt;, &lt;code&gt;DllRegisterServer()&lt;/code&gt; und &lt;code&gt;DllUnregisterServer()&lt;/code&gt; exportieren.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>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.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>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.</div></td> </tr> <tr> <td colspan="2" class="diff-empty diff-side-deleted"></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>[[ActiveX]] verwendet dieses Modell.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>==== Local Server ====</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>==== Local Server ====</div></td> </tr> </table> Lofote https://de.wikipedia.org/w/index.php?title=Component_Object_Model&diff=223308129&oldid=prev Filzstift: BKL-fix, replaced: .NET → .NET (2) mit AWB 2022-05-31T06:20:45Z <p>BKL-fix, replaced: <a href="/wiki/.NET" title=".NET">.NET</a> → <a href="/wiki/.Net-Framework" title=".Net-Framework">.NET</a> (2) mit <a href="/wiki/Wikipedia:AWB" class="mw-redirect" title="Wikipedia:AWB">AWB</a></p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="de"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Nächstältere Version</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Version vom 31. Mai 2022, 08:20 Uhr</td> </tr><tr> <td colspan="2" class="diff-lineno">Zeile 72:</td> <td colspan="2" class="diff-lineno">Zeile 72:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>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.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>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.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>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 &lt;code&gt;CoInitialize()&lt;/code&gt;. Programmiersprachen mit integrierter COM-Unterstützung (zum Beispiel VB6 und die meisten [[.<del style="font-weight: bold; text-decoration: none;">NET</del>]]-Sprachen) führen diese Zuordnung oft automatisch durch.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>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 &lt;code&gt;CoInitialize()&lt;/code&gt;. Programmiersprachen mit integrierter COM-Unterstützung (zum Beispiel VB6 und die meisten [[.<ins style="font-weight: bold; text-decoration: none;">Net-Framework</ins>]]-Sprachen) führen diese Zuordnung oft automatisch durch.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>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.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>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.</div></td> </tr> <tr> <td colspan="2" class="diff-lineno">Zeile 90:</td> <td colspan="2" class="diff-lineno">Zeile 90:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* automatisierend</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* automatisierend</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>zu programmieren.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>zu programmieren.</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>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]]-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.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>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 [[<ins style="font-weight: bold; text-decoration: none;">.Net-Framework|</ins>.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.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>=== Sprachunabhängigkeit ===</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>=== Sprachunabhängigkeit ===</div></td> </tr> </table> Filzstift https://de.wikipedia.org/w/index.php?title=Component_Object_Model&diff=195710275&oldid=prev Orthographus: Komma 2020-01-11T13:52:32Z <p>Komma</p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="de"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Nächstältere Version</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Version vom 11. Januar 2020, 15:52 Uhr</td> </tr><tr> <td colspan="2" class="diff-lineno">Zeile 126:</td> <td colspan="2" class="diff-lineno">Zeile 126:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>=== Ortsunabhängigkeit ===</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>=== Ortsunabhängigkeit ===</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>COM ist ''ortsunabhängig'', d.&amp;nbsp;h. dass die einzelnen COM-Komponenten an einer zentralen Stelle ''([[Registrierungsdatenbank]])'' angemeldet werden und so der Zugriff auf die Komponenten unabhängig von ihrem eigentlichen Ort erfolgen kann.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>COM ist ''ortsunabhängig'', d.&amp;nbsp;h.<ins style="font-weight: bold; text-decoration: none;">,</ins> dass die einzelnen COM-Komponenten an einer zentralen Stelle ''([[Registrierungsdatenbank]])'' angemeldet werden und so der Zugriff auf die Komponenten unabhängig von ihrem eigentlichen Ort erfolgen kann.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>{{Siehe auch|Ortstransparenz}}</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>{{Siehe auch|Ortstransparenz}}</div></td> </tr> </table> Orthographus https://de.wikipedia.org/w/index.php?title=Component_Object_Model&diff=194465190&oldid=prev Invisigoth67: typo 2019-11-28T17:10:53Z <p>typo</p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="de"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Nächstältere Version</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Version vom 28. November 2019, 19:10 Uhr</td> </tr><tr> <td colspan="2" class="diff-lineno">Zeile 120:</td> <td colspan="2" class="diff-lineno">Zeile 120:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>=== Plattformunabhängigkeit ===</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>=== Plattformunabhängigkeit ===</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>x64-Applikationen können dank Marshalling auf <del style="font-weight: bold; text-decoration: none;">32bittige</del> 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&lt;ref&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}}&lt;/ref&gt;&lt;ref&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}}&lt;/ref&gt;, wurde aber wohl nur in wenigen Ausnahmefällen realisiert.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>x64-Applikationen können dank Marshalling auf <ins style="font-weight: bold; text-decoration: none;">32-bittige</ins> 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&lt;ref&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}}&lt;/ref&gt;&lt;ref&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}}&lt;/ref&gt;, wurde aber wohl nur in wenigen Ausnahmefällen realisiert.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>=== Objektorientierung ===</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>=== Objektorientierung ===</div></td> </tr> </table> Invisigoth67 https://de.wikipedia.org/w/index.php?title=Component_Object_Model&diff=192328314&oldid=prev Trustable: Kleinigkeiten verbessert 2019-09-17T10:02:43Z <p>Kleinigkeiten verbessert</p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="de"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Nächstältere Version</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Version vom 17. September 2019, 12:02 Uhr</td> </tr><tr> <td colspan="2" class="diff-lineno">Zeile 4:</td> <td colspan="2" class="diff-lineno">Zeile 4:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Architektur ==</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Architektur ==</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>COM basiert auf dem [[Client-Server-Modell]]. Ein COM-Client erzeugt eine COM-Komponente in einem <del style="font-weight: bold; text-decoration: none;">so genannten</del> COM-Server und nutzt die Funktionalität des Objektes über COM-Schnittstellen. Der Zugriff auf Objekte wird innerhalb eines Prozesses durch <del style="font-weight: bold; text-decoration: none;">so genannte</del> COM-Apartments synchronisiert.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>COM basiert auf dem [[Client-Server-Modell]]. Ein COM-Client erzeugt eine COM-Komponente in einem <ins style="font-weight: bold; text-decoration: none;">sogenannten</ins> COM-Server und nutzt die Funktionalität des Objektes über COM-Schnittstellen. Der Zugriff auf Objekte wird innerhalb eines Prozesses durch <ins style="font-weight: bold; text-decoration: none;">sogenannte</ins> COM-Apartments synchronisiert.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>=== COM-Server ===</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>=== COM-Server ===</div></td> </tr> <tr> <td colspan="2" class="diff-lineno">Zeile 26:</td> <td colspan="2" class="diff-lineno">Zeile 26:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Jede Schnittstelle hat eine weltweit eindeutige Identifikationsnummer, die [[Globally Unique Identifier|GUID]] (''Globally Unique Identifier''). Dadurch können auch mehrere Schnittstellen mit demselben Namen existieren (aber nicht mit derselben GUID).</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Jede Schnittstelle hat eine weltweit eindeutige Identifikationsnummer, die [[Globally Unique Identifier|GUID]] (''Globally Unique Identifier''). Dadurch können auch mehrere Schnittstellen mit demselben Namen existieren (aber nicht mit derselben GUID).</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Um eine programmiersprachenübergreifende Client/Server-Kommunikation zu ermöglichen, findet an der Schnittstelle das <del style="font-weight: bold; text-decoration: none;">so genannte</del> ''[[Marshalling]]'' statt, das die auszutauschenden Daten in eine vordefinierte Binärrepräsentation wandelt.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Um eine programmiersprachenübergreifende Client/Server-Kommunikation zu ermöglichen, findet an der Schnittstelle das <ins style="font-weight: bold; text-decoration: none;">sogenannte</ins> ''[[Marshalling]]'' statt, das die auszutauschenden Daten in eine vordefinierte Binärrepräsentation wandelt.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>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.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>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.</div></td> </tr> <tr> <td colspan="2" class="diff-lineno">Zeile 48:</td> <td colspan="2" class="diff-lineno">Zeile 48:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>}</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>}</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>&lt;/syntaxhighlight&gt;</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>&lt;/syntaxhighlight&gt;</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Jede Schnittstelle muss über eine Schnittstellen-Vererbung die Funktionen der hier gezeigten Schnittstelle &lt;code&gt;IUnknown&lt;/code&gt; definieren, da dieses die grundlegenden Funktionen für COM implementiert. Eine weitere [[Vererbung (<del style="font-weight: bold; text-decoration: none;">objektorientierte </del>Programmierung)|Vererbung]] der Schnittstellendefinitionen ist möglich.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Jede Schnittstelle muss über eine Schnittstellen-Vererbung die Funktionen der hier gezeigten Schnittstelle &lt;code&gt;IUnknown&lt;/code&gt; definieren, da dieses die grundlegenden Funktionen für COM implementiert. Eine weitere [[Vererbung (Programmierung)|Vererbung]] der Schnittstellendefinitionen ist möglich.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>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 &lt;code&gt;IDispatch&lt;/code&gt; definieren. Dies ermöglicht es, eine COM-Komponente über &lt;code&gt;IDispatch.Invoke()&lt;/code&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 (''Dual Interface''), so dass bei Programmiersprachen, die [[Zeiger (Informatik)|Zeiger]] beherrschen, beide Zugriffsmöglichkeiten zur Verfügung stehen.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>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 &lt;code&gt;IDispatch&lt;/code&gt; definieren. Dies ermöglicht es, eine COM-Komponente über &lt;code&gt;IDispatch.Invoke()&lt;/code&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 (''Dual Interface''), so dass bei Programmiersprachen, die [[Zeiger (Informatik)|Zeiger]] beherrschen, beide Zugriffsmöglichkeiten zur Verfügung stehen.</div></td> </tr> <tr> <td colspan="2" class="diff-lineno">Zeile 68:</td> <td colspan="2" class="diff-lineno">Zeile 68:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>=== Apartments ===</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>=== Apartments ===</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>COM-Objekte werden bei der Erzeugung immer einem <del style="font-weight: bold; text-decoration: none;">so genannten</del> 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.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>COM-Objekte werden bei der Erzeugung immer einem <ins style="font-weight: bold; text-decoration: none;">sogenannten</ins> 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.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>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.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>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.</div></td> </tr> <tr> <td colspan="2" class="diff-lineno">Zeile 93:</td> <td colspan="2" class="diff-lineno">Zeile 93:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>=== Sprachunabhängigkeit ===</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>=== Sprachunabhängigkeit ===</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>COM-Komponenten sind unabhängig von der Programmiersprache. COM unterstützt den <del style="font-weight: bold; text-decoration: none;">so genannten</del> [[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.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>COM-Komponenten sind unabhängig von der Programmiersprache. COM unterstützt den <ins style="font-weight: bold; text-decoration: none;">sogenannten</ins> [[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.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>=== Versionsunabhängigkeit ===</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>=== Versionsunabhängigkeit ===</div></td> </tr> <tr> <td colspan="2" class="diff-lineno">Zeile 120:</td> <td colspan="2" class="diff-lineno">Zeile 120:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>=== Plattformunabhängigkeit ===</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>=== Plattformunabhängigkeit ===</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>x64-Applikationen können dank Marshalling auf 32bittige 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&lt;ref&gt;{{Internetquelle |autor=Christian Gross |url=https://msdn.microsoft.com/en-us/library/aa260790(v=vs.60).aspx |titel=Building COM Components on UNIX<del style="font-weight: bold; text-decoration: none;"> |werk=</del> |hrsg=Microsoft |datum=1998-07 |zugriff=2016-05-29 | sprache=en}}&lt;/ref&gt;&lt;ref&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}}&lt;/ref&gt;, wurde aber wohl nur in wenigen Ausnahmefällen realisiert.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>x64-Applikationen können dank Marshalling auf 32bittige 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&lt;ref&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}}&lt;/ref&gt;&lt;ref&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}}&lt;/ref&gt;, wurde aber wohl nur in wenigen Ausnahmefällen realisiert.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>=== Objektorientierung ===</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>=== Objektorientierung ===</div></td> </tr> </table> Trustable https://de.wikipedia.org/w/index.php?title=Component_Object_Model&diff=183072773&oldid=prev Horst Gräbner: Die letzte Textänderung von 2A02:810D:E80:6B54:D9B1:DBCF:D7E4:5F97 wurde verworfen; keine Verbesserung 2018-11-25T18:01:34Z <p>Die letzte Textänderung von <a href="/wiki/Spezial:Beitr%C3%A4ge/2A02:810D:E80:6B54:D9B1:DBCF:D7E4:5F97" title="Spezial:Beiträge/2A02:810D:E80:6B54:D9B1:DBCF:D7E4:5F97">2A02:810D:E80:6B54:D9B1:DBCF:D7E4:5F97</a> wurde verworfen; keine Verbesserung</p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="de"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Nächstältere Version</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Version vom 25. November 2018, 20:01 Uhr</td> </tr><tr> <td colspan="2" class="diff-lineno">Zeile 24:</td> <td colspan="2" class="diff-lineno">Zeile 24:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>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.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>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.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Jede Schnittstelle hat eine <del style="font-weight: bold; text-decoration: none;">global</del> eindeutige Identifikationsnummer, die [[Globally Unique Identifier|GUID]] (''Globally Unique Identifier''). Dadurch können auch mehrere Schnittstellen mit demselben Namen existieren (aber nicht mit derselben GUID).</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Jede Schnittstelle hat eine <ins style="font-weight: bold; text-decoration: none;">weltweit</ins> eindeutige Identifikationsnummer, die [[Globally Unique Identifier|GUID]] (''Globally Unique Identifier''). Dadurch können auch mehrere Schnittstellen mit demselben Namen existieren (aber nicht mit derselben GUID).</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Um eine programmiersprachenübergreifende Client/Server-Kommunikation zu ermöglichen, findet an der Schnittstelle das so genannte ''[[Marshalling]]'' statt, das die auszutauschenden Daten in eine vordefinierte Binärrepräsentation wandelt.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Um eine programmiersprachenübergreifende Client/Server-Kommunikation zu ermöglichen, findet an der Schnittstelle das so genannte ''[[Marshalling]]'' statt, das die auszutauschenden Daten in eine vordefinierte Binärrepräsentation wandelt.</div></td> </tr> </table> Horst Gräbner