ABOUT Visual Basic Programmieren Programmierung Download Downloads Tips & Tricks Tipps & Tricks Know-How Praxis VB VBA Visual Basic for Applications VBS VBScript Scripting Windows ActiveX COM OLE API ComputerPC Microsoft Office Microsoft Office 97 Office 2000 Access Word Winword Excel Outlook Addins ASP Active Server Pages COMAddIns ActiveX-Controls OCX UserControl UserDocument Komponenten DLL EXE
Diese Seite wurde zuletzt aktualisiert am 02.07.2001

Diese Seite wurde zuletzt aktualisiert am 02.07.2001
Aktuell im ABOUT Visual Basic-MagazinGrundlagenwissen und TechnologienKnow How, Tipps und Tricks rund um Visual BasicActiveX-Komponenten, Controls, Klassen und mehr...AddIns für die Visual Basic-IDE und die VBA-IDEVBA-Programmierung in MS-Office und anderen AnwendungenScripting-Praxis für den Windows Scripting Host und das Scripting-ControlTools, Komponenten und Dienstleistungen des MarktesRessourcen für Programmierer (Bücher, Job-Börse)Dies&Das...

Themen und Stichwörter im ABOUT Visual Basic-Magazin
Code, Beispiele, Komponenten, Tools im Überblick, Shareware, Freeware
Ihre Service-Seite, Termine, Job-Börse
Melden Sie sich an, um in den vollen Genuss des ABOUT Visual Basic-Magazins zu kommen!
Informationen zum ABOUT Visual Basic-Magazin, Kontakt und Impressum

Zurück...

Der Dritte im Bunde

Zurück...


Anzeige

(-hg) mailto:hg_thirdparty@aboutvb.de

Gegenseitige Bekanntschaften sind ja ganz nett. Doch Visual Basic lässt solche nicht zu - zumindest nicht zwischen zwei ActiveX-Komponenten. Es ist nämlich unmöglich, in beide einen Verweis auf die jeweils andere aufzunehmen - die Komponenten können sich nicht gegenseitig referenzieren. Dabei ist die Notwendigkeit einer solchen gegenseitigen Referenzierung gar nicht so abwegig.

Denken Sie nur einmal an eine ActiveX-EXE, die die Dienste einer ActiveX-DLL nutzen soll und daher üblicherweise und sinnvollerweise einen Verweis auf diese ActiveX-DLL enthält. Doch wenn bei Aufrufen der Methoden der ActiveX-DLL Objekte aus der ActiveX-EXE an die ActiveX-DLL übergeben werden sollen, endet die Freundschaft - nach VB-Regeln. Da Sie ja umgekehrt in die ActiveX-DLL keinen Verweis auf die ActiveX-EXE aufnehmen können, lassen sich auch keine Methoden-Parameter als Objekt-Datentypen der ActiveX-EXE deklarieren.

Ein denkbarer und nahe liegender Ausweg wäre, diese Parameter einfach als "As Object" zu deklarieren. Das funktioniert auch ohne Probleme. So lange es nur um die bloße Übergabe geht, ist das auch nicht allzu tragisch, auch wenn bereits an dieser Stelle der Vorteil der frühen Bindung verloren geht. Der Verlust der frühen Bindung kommt jedoch bei der Verwendung der übergebenen Objekte innerhalb der ActiveX-DLL zum Tragen. Es ist ja nicht nur so, dass Sie auf die Bequemlichkeit der IntelliSense-Unterstützung verzichten müssen. Sondern vor allem die Performance-Einbußen und der Verlust der durch frühe Bindung gewährleisteten Typsicherheit können sich spürbar auswirken.

Einen viel eleganteren Ausweg bietet die Definition einer Schnittstelle in einer dritten Komponente als Typbibliothek (bzw. in einer "echten" Typbibliothek). Unsere beiden Komponenten können problemlos einen Verweis auf diese Typbibliothek aufnehmen, ohne sich ins Gehege zu kommen. In beiden Komponenten implementieren diejenigen Objekte, die auf beiden Seiten bekannt sein sollen, Schnittstellen der Typbibliothek. Die Deklarationen von Methoden-Parametern und Datentypen von Eigenschaften als auch von Objekt-Variablen innerhalb der Komponenten können auf den Schnittstellen-Typen beruhen.

Da kaum alle Methoden und Eigenschaften der betreffenden Objekte auf beiden Seiten bekannt zu sein brauchen und verwendet werden, genügt es, die Schnittstellen nur mit den tatsächlich notwendigen Elementen auszustatten. Angenommen, das Objekt "ObjA" der ActiveX-EXE soll an die ActiveX-DLL übergeben werden, und dort soll die Methode "TuWas" dieses Objekts aufgerufen werden können.

Die Schnittstellen-Klasse (bzw. Schnittstelle in einer Typbibliothek) könnte nun so definiert werden:

' Klasse IObjA.cls in Schnittstellen-Komponente bzw. Typbibliothek

Public Sub TuWas()
'
End Sub

Neben der eigentlichen Methode "TuWas" enthält die Klasse ObjA in der ActiveX-EXE nun auch die Schnittstellen-Methode gleichen Namens:

' Klasse ObjA.cls in der ActiveX-EXE

Implements IObjA

Private Sub IObjA_TuWas()
  Me.TuWas
End Sub

Public Sub TuWas()
  MsgBox "Ich mach' ja schon...!"
End Sub

Auf der Seite der ActiveX-DLL könnte nun in einer Klasse (beispielsweise Diener.cls) einer Methode ein Objekt ObjA in der "Verkleidung" als IObjA übergeben und dort verwendet werden:

' Klasse Diener.cls in der ActiveX-DLL

Public Sub MachWasDamit(ObjA As IObjA)
  ObjA.TuWas
End Sub

Und nun noch an beliebiger Stelle der Aufruf dieser Methode aus der ActiveX-EXE heraus:

Dim MeinDiener As Diener

Diener.MachWasDamit Me

Sie sehen: Mit einem Dritten im Bunde klappt es auch mit dem Nachbarn...

Noch einige weitere in diesem Zusammenhang mit Schnittstellen und Typbibliotheken interessante Hinweise und Tipps finden Sie unter Typelibs by VB"Typelibs by VB" und unter Schnittstellen 'chamäleonieren'"Schnittstellen 'chamäleonieren'".


Artikel
Mail an den Autor dieses Artikels

KnowHow
Zur KnowHow-Übersicht

KnowHow-Themen
Themen - Allgemeines
Themen - Entwicklungsumgebung (VB-IDE)
Themen - Forms
Themen - Steuerelemente (Controls)
Themen - Grafik
Themen - Dateien
Themen - UserControls
Themen - Einsteiger-Tipps
Themen - Wussten Sie...?

Übersicht nach Titeln in alphabetischer Reihenfolge
Übersicht nach Erscheinungsdatum

Schnellsuche




Zum Seitenanfang

Copyright © 1999 - 2017 Harald M. Genauck, ip-pro gmbh  /  Impressum

Zum Seitenanfang

Zurück...

Zurück...

Download Internet Explorer