Dispatch-Schnittstellen
Nach oben zu Automatisierungsschnittstellen
Automatisierungs-Controller sind Clients, die die COM-Schnittstelle IDispatch für den Zugriff auf COM-Server-Objekte verwenden. Der Controller muss das betreffende Objekt zunächst erzeugen, dann die Schnittstelle IUnknown des Objekts nach einem Zeiger auf seine Schnittstelle IDispatch abfragen. IDispatch verfolgt die Methoden und Eigenschaften intern über einen Dispatch-Bezeichner (dispID). Dabei handelt es sich um eine eindeutige Identifikationsnummer für Schnittstellenelemente. Über IDispatch ruft ein Controller die Typinformationen des Objekts für die Dispatch-Schnittstelle ab und bildet die Schnittstellenelementnamen auf spezielle dispIDs ab. Diese stehen zur Laufzeit zur Verfügung und werden von den Controllern durch Aufruf der IDispatch-Methode GetIDsOfNames abgerufen.
Sobald der Controller die dispID ermittelt hat, kann er die IDispatch-Methode Invoke aufrufen, um den zugehörigen Quelltext (Eigenschaft oder Methode) ausführen zu lassen, wobei die Parameter für die Eigenschaft oder Methode in einen der Invoke-Parameter verpackt werden. Invoke weist bei der Compilierung eine feste Signatur auf, die es diesem Parameter ermöglicht, beim Aufrufen einer Schnittstellenmethode eine beliebige Anzahl von Argumenten zu akzeptieren.
Die Implementierung der Methode Invoke für das Automatisierungsobjekt muss dann die Parameter wieder "entpacken", die Eigenschaft oder Methode aufrufen und auf die Behandlung jeglicher auftretenden Fehler eingerichtet sein. Wenn die Eigenschaft oder Methode zurückgegeben wird, liefert das Objekt den Rückgabewert an den Controller.
Dieser Vorgang wird spätes Binden genannt, weil die Bindung des Controllers an die Eigenschaft bzw. Methode zur Laufzeit und nicht schon bei der Compilierung erfolgt.