This project has moved and is read-only. For the latest updates, please go here.

Tutorial05 – Der richtige Umgang mit unbekannten COM Objekten

Viele Office Anwendungen bieten Ihnen Eigenschaften oder Methoden an, deren Rückgabewert zu Entwicklungszeit nicht fest typisiert ist, in anderen Worten Sie bekommen im IntelliSense Ihrer IDE lediglich den Typ Object angeboten. Dieses Tutorial beleuchtet die Hintergründe dieses ärgerlichen Problems.

Auf der Detail-Ebene ist zwischen anonymen COM Objekten und dem Datentyp Variant zu unterscheiden. Keine Sorge: In der Praxis ist der Umgang mit COM Objekten und Variant Datentypen identisch und nicht sonderlich kompliziert.

Warum gibt es unbekannte COM Objekte in Office Anwendungen?

Der häufigste Fall ist auf eine Top-Down Abhängigkeit zwischen Office Anwendungen und der Office Kernkomponente zurückzuführen. Betrachten Sie dazu folgendes Schaubild.

Schaubild: Das Office Konzept 

TopDown  

Sie können erkennen das Office Anwendungen einen gemeinsamen Kern nutzen in dem unter anderem die Funktionalität für die Benutzeroberfläche oder COMAddins enthalten sind. Objekte die in dieser gemeinsamen Office Bibliothek definiert sind stehen vor einem Problem wenn Sie einen Verweis auf Ihre Host-Anwendung anbieten wollen. Sie kennen die Host-Anwendung zur Entwicklungszeit nicht da viele Office Anwendungen auf diesen zentralen Kern zugreifen. Betrachten Sie dazu folgenden Beispielcode:

Schaubild: Anonyme COM Objekte nutzen

UnkownScreenVB

Wir durchlaufen an dieser Stelle die COMAddins Auflistung von MS-Excel und ermitteln via Application Property die Hostanwendung. Die Funktionalität für COMAddins ist jedoch zentral in der Office Kernbibliothek definiert. Daher kann die Eigenschaft Application zur Entwicklungszeit nicht stark typisiert angeboten werden. Da es sich beim Rückgabewert aber in jedem Fall um ein COM Objekt handelt, spricht man an dieser Stelle von unbekannten COM Objekten. In NetOffice werden diese Objekte  zusätzlich mit dem AnonymCOMProxy Attribute markiert und ein Hinweis im IntelliSense eingeblendet.

Sie verlieren durch diese Anonymität zur Entwicklungszeit nicht das COM Proxy Management in NetOffice und können in Visual Basic auch den Latebinding Mechanismus nutzen. C# Entwickler müssen anyonyme Objekte zur Laufzeit casten oder mit dynamic arbeiten.

Lesen Sie in Tutorial06 wie Sie mit dem Variant Datentyp umgehen.

Last edited May 12, 2012 at 8:07 PM by SebastianDotNet, version 20

Comments

No comments yet.