Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

COM-Programmierung mit Visual Basic 6 Michael Willers Microsoft GmbH.

Ähnliche Präsentationen


Präsentation zum Thema: "COM-Programmierung mit Visual Basic 6 Michael Willers Microsoft GmbH."—  Präsentation transkript:

1 COM-Programmierung mit Visual Basic 6 Michael Willers Microsoft GmbH

2 Agenda Warum COM und VB? Wie funktionierts? Wo gibts weitere Infos?

3 Warum COM und VB? Sie können unter VB objektorientiert arbeiten Besseres Design Code wird wartungsfreundlicher Sie können objektorientiert binäre Komponenten entwickeln, die über einem einheitlichen Mechanismus kommunizieren sprachneutral Baukastensystem

4 Mit VB können Sie Klassen erstellen Werden als cls-Dateien gespeichert Ein Objekt ist die Instanz einer Klasse Instanz wird mit Set... = New... zur Laufzeit erstellt Kapselung Code und Daten werden gemeinsam in ein Objekt gepackt VB-Klassen und Kapselung Properties stellen die Daten dar Methoden und Events stellen den Code dar Wie funktionierts? Objektorientierung unter VB - Klassen

5 Events ermöglichen asynchrones Arbeiten Rückmeldung während der Abarbeitung einer Methode Jede VB-Klasse feuert zwei Events Initialize: Instanz einer Klasse wird angelegt Terminate: Instanz einer Klasse wird entsorgt Für jede Klasse können eigene Events definiert und gefeuert werden Aufrufer kann auf zwei Arten reagieren Event-Routine CallBack-Mechanismus Wie funktionierts? Objektorientierung unter VB - Events

6 Wann benutzt man Event-Handler, wann Callback-Funktionen? Event Die Klasse, die den Event auslöst, benötigt keine Informationen über den Aufrufer Lose Kopplung Connection-Points behind the scenes Callback Die Klasse, die den Event auslöst, benötigt detaillierte Informationen über den Aufrufer Handshake zwischen Klasse und Aufrufer Wie funktionierts? Objektorientierung unter VB - Events

7 Demo

8 Wie funktionierts? Schnittstellenorientierte Programmierung Public Sub Method1() Dim i as Integer i = i + 1 End Sub Public Sub Method2(x as Double) x = x End Sub Public Function Method3() as Integer Dim i as Integer i = 42 Method3 = i End Function Public Sub Method1() Dim i as Integer i = i + 1 End Sub Public Sub Method2(x as Double) x = x End Sub Public Function Method3() as Integer Dim i as Integer i = 42 Method3 = i End Function Public Sub Method1() End Sub Public Sub Method2(x as Double) End Sub Public Function Method3() as Integer End Function Public Sub Method1() End Sub Public Sub Method2(x as Double) End Sub Public Function Method3() as Integer End Function Schnittstelle Klasse Trennung von Definition und Implementation

9 Die Zuordnung zwischen Klasse und Schnittstelle erfolgt über implements Die Klasse muss dann die Schnittstelle vollständig implementieren Unterschiedliche Klassen können die gleiche Schnittstelle implementieren Polymorphie! Neue Klassen können hinzugefügt werden und vorhandener Code bleibt lauffähig Dim car as ICar car.Hoot Eine Klasse kann mehrere Schnittstellen implementieren Wie funktionierts? Schnittstellenorientierte Programmierung

10 Was tun, wenn eine Schnittstelle, die schon im Einsatz ist, geändert werden muss? Neue Schnittstelle mit der neuen Funktionalität erstellen und implementieren! Vorhandener Code bleibt lauffähig Clients können nach der neuen Schnittstelle fragen oder die alte Funktionalität benutzen Dim car as ICar, car2 as ICar2 Set car = new CFord If TypeOf car is ICar2 then Set car2 = car car2.PowerHoot Else car.Hoot End If Wie funktionierts? Versionierung von Schnittstellen

11 Demo

12 Dim App as New MyObject.Obj1 Explizite Zuweisung per SET nicht erforderlich Aber: Bei jeden Aufruf wird geprüft, ob ein gültiger Objekt-Verweis existiert ggf. wird eine neue Instanz erzeugt!! Set App = New MyObject.Obj1 Verweis auf ein Objekt wird einmalig erstellt Verweis bleibt erhalten, bis der Aufruf von Set App = nothing erfolgt oder Scope verlassen wird Wie funktionierts? Wann rufe ich New... auf?

13 Es erfolgt der Aufruf von Set... = nothing Objekt wird unmittelbar nach dem Aufruf entsorgt ( Referenzen beachten) ACHTUNG: Über Terminate-Event ist keine Fehlerbehandlung möglich!!! Wenn man diese braucht, sollte man das Objekt explizit mit Set... = nothing entsorgen Ein Objekt ist global innerhalb eines Moduls oder einer Methode deklariert: Objekt wird beim Verlassen des Moduls entsorgt wird Objekt mit Set...= New oder CreateObject neu angelegt wird das alte Objekt automatisch entsorgt Wie funktionierts? Wann wird ein Objekt entsorgt?

14 Frühe Bindung Objektverweise sind zur Compilezeit bekannt Dim app as MyApp.Class1 Set app = New MyApp.Class1 oder Set app = CreateObject(MyApp.Class1) Späte Bindung Objekttyp ist erst zur Laufzeit bekannt Dim app as Object Set app = CreateObject(MyApp.Class1) Automation ( IDispatch) Wie funktionierts? Frühe und späte Bindung

15 Demo

16 Eine COM-Schnittstelle ist die logische Gruppierung von Methoden Eine Co-Klasse ist eine Klasse, die eine oder mehrere Schnittstellen implementiert Ein COM-Objekt ist die Instanz einer Co-Klasse Eine Komponente ist eine binäre Datei, die eine oder mehrere Co-Klassen enthält wird oft auch mit COM-Server bezeichnet Wie funktionierts? COM-Grundsätzliches

17 COM-Schnittstellen werden mit der Interface Definition Language IDL beschrieben Visual Basic macht dies behind the scenes Eine TypeLibrary ist die Beschreibung einer Schnittstelle in binärer Form Wird mit dem MIDL-Compiler aus einer IDL- Datei erstellt Liegt als separate TLB-Datei vor oder ist als Ressource integriert Visual Basic macht auch dies behind the scenes Wie funktionierts? Beschreibung von Schnittstellen

18 In Visual Basic können TLB-Dateien nur mit der Enterprise-Edition erstellt werden Project Properties Remote Server files Visual Basic bindet TLB-Datei als Ressource in den COM-Server ein Um Informationen zu Schnittstellen zu erhalten, kann man TLBs referenzieren Referenzieren in VB Project References Wenn die TLB nicht nicht registriert ist, wird das an dieser Stelle implizit gemacht! Ansehen mit dem Objektkatalog Wie funktionierts? Beschreibung von Schnittstellen

19 OLEVIEW ist ein praktisches Werkzeug, um die IDL zu lernen In größeren Projekten sollten Sie die IDL separat erstellen und TLB-Dateien zur Verfügung stellen benutzen Sie Visual C++ zum Erstellen von IDL und TLB insbesondere in gemischtsprachigen Umgebungen Wie funktionierts? COM-Schnittstellen, Tipps & Hinweise

20 small long hyper IDLC++Java short char long __int64 byte int long shortshort Visual Basic N/A Long N/A Integer unsigned small unsigned long unsigned hyper unsigned short unsigned char unsigned long unsigned __int64 byte int long unsigned short short Byte N/A N/A N/A float double float double float double Single Double char unsigned char char char byte N/A Byte wchar_twchar_tcharInteger Script nein ja nein ja nein nein nein nein ja ja nein ja nein Wie funktionierts? Datentypen

21 byte boolean VARIANT_BOOL IDLC++Java BYTE unsigned char long VARIANT_BOOL char int boolean byte Visual Basic N/A Long Boolean Byte BSTR VARIANT BSTRjava.lang.String VARIANTcom.ms.com.Variant String Variant CYlongintCurrency DATE enum doubledouble enumint Date Enum Typed ObjRef IFoo * interface IFoo IFoo structstruct final class Type union C-Array unionN/A arrayarray N/A N/A Script nein nein ja ja ja ja ja ja ja ja nein nein nein Wie funktionierts? Datentypen

22 Wie funktionierts? COM-Schnittstellen, Tipps & Hinweise Visual Basic unterstützt nicht alle Möglichkeiten der IDL Schnittstellen müssen immer von IDispatch abgeleitet sein Vererbung eigener Schnittstellen ist nicht möglich Alle Methoden müssen ein HRESULT zurückgeben Parameter sollten keine Unsigned Parameter (z.B. unsigned long) oder Zeiger sein Reine [out]-Parameter sind nicht erlaubt

23 Demo

24 OLE32.DLL Service Control Manager (RPCSS.EXE) carserver.dll Service Control Manager OLE32.DLL carclient.exe OLE32.DLL carclient.exe Wie funktionierts? Der Service Control Manager (SCM)

25 VB-Runtime ruft CoCreateInstance auf und übergibt CLSID und IID an den SCM SCM sucht anhand der CLSID den dazugehörigen COM-Server über Registry- Einträge und lädt ihn ggf. in den Speicher COM-Server erstellt Instanz der Co-Klasse und erstellt anhand der IID eine Referenz auf die gewünschte Schnittstelle Der SCM reicht die Referenz an den Client weiter Der SCM verlässt die Bühne Wie funktionierts? Anlegen eines COM-Objekts

26 HKEY_CLASSES_ROOT CFord Wie funktionierts? CLSID InprocServer32 C:\CarServer.dll

27 New Objekt wird direkt auf Basis der CLSID erzeugt CreateObject ProgID wird in CLSID umgewandelt Objekt wird auf Basis der CLSID erzeugt Wie funktionierts? New und CreateObject

28 Sie können Ihre Anwendung noch weiter Entkoppeln Erstellen Sie Objekte nicht direkt Delegieren Sie diese Aufgabe an ein eigens dafür entwickeltes Objekt Solche Objekte nennt man auch Class Factory Ihre Anwendung braucht dann nur die Schnittstelle und das Factory Objekt zu kennen Wie funktionierts? Was ist eine ClassFactory?

29 Demo

30 In-Process VB ActiveX DLL-Projekt läuft gleichen Adressraum wie der Aufrufer Out of Process ActiveX EXE-Projekt läuft im eigenen Prozess läuft auf der selben Maschine wie der Aufrufer Remote ActiveX EXE-Projekt läuft in eigenem Prozess läuft auf einer anderen Maschine Wie funktionierts? COM-Server

31 Achten Sie darauf, das bei den Projekteigenschaften die Einstellung Binärkompatibilität gewählt ist Beim aller ersten Übersetzen No Compatibility Bei unterschiedlichen Adressräumen müssen Schnittstellenreferenzen transferiert werden Diesen Vorgang nennt man Marshalling Erfolgt mit sogenannten Proxy-Stub-DLLs ist im Bezug auf die Performance teuer Wie funktionierts? COM-Server

32 Unter Visual Basic werden nur STA-Threads benutzt Sämtliche Objektzugriffe werden von COM synchonisiert ActiveX EXE Thead per Object: Jede Instanz läuft in eigenem Thread Thread Pool: Alle Instanzen müssen sich Threads teilen und der SCM (RPCSS.EXE) sorgt für die Verwaltung der Threads ActiveX DLL Single Theaded: Alle Instanzen laufen in ein und dem selben Thread ( sinnvoll für Singletons) Apartment Threaded: Alle Objekte eines Clients laufen im gleichen Thread Wie funktionierts? Threading

33 Demo

34 OLEAUT32.DLL enthält den Universal Marshaller, der das Marshalling auf Basis der TypeLibrary durchführen kann Die Schnittstellen in der TypeLibrary müssen das Attribut dual oder or oleautomation aufweisen Die TypeLib muss auf Client UND Server registriert werden ( CliReg32) Methodenparameter müssen VARIANT-compliant sein Wie funktionierts? Universal Marshaller

35 HKEY_CLASSES_ROOT InprocServer32 {IID_IPager} {CLSID_UniMarsh} {IID_IMessageSource} ThreadingModel=both TypeLib Wie funktionierts? Universal Marshaller und die Registry

36 Demo

37 Benutzen Sie bei Aufrufen über das Netz nach Möglichkeit keine Properties Pro Property ein Roundtrip Seit DCOM 1.2 können UDTs mit dem Universal Marshaller übertragen werden Windows 95: DCOM 1.2 installieren in NT4 ab Service Pack 4 in Windows 98 und 2000 eingebaut VB arbeitet ausschließlich mit dem Universal Marshaller Ausnahme: ADO-Recordset Wie funktionierts? DCOM: Allgemeine Tipps

38 ByRef bedeutet, dass ein Parameter in beide Richtungen wird IDL-Attribute [in, out] Achtung: wird von VB standardmäßig benutzt 2 Roundtrips notwendig! ByVal bedeutet, dass ein Parameter in eine Richtung übertragen wird IDL-Attribute [in] Reine Out-Parameter werden von VB nicht unterstützt Wie funktionierts? DCOM: ByRef und ByVal

39 Objekte können standardmäßig nicht über das Netz transportiert werden Custom-Marshalling in VB nicht möglich Schnittstelle IMarshal für jeweiliges Objekt mit Visual C++ implementieren Ausnahme: ADO-Recordsets Entwickeln Sie Pseudo-Proxy/Stubs sinnvoll, wenn Sie bspw. mit Collections arbeiten Wie funktionierts? DCOM: Objekte

40 Demo

41 Aufzählungen müssen sich immer in einem Klassenmodul befinden Benutzen Sie immer die Einstellung Binär-kompatibel Der Rest macht nur Ärger und müllt die Registry zu Für Klassen werden Standardschnitt- stellen erstellt Eigene Schnittstellen per implements Erstellen Sie die IDL mit Visual C++ Wie funktionierts? Tipps & Hinweise

42 msdn TechTalk microsoft.public.de.german.entwickler.techtalk Sites ( Büchersuche) Wo gibts weitere Infos? Online

43 Bücher Programming Distributed Applications... Ted Pattison ISBN Microsoft Press COM IDL and Interface Design ISBN Wrox Press Zeitschriften basicpro Microsoft System Journal, 6/99, Seite 85 Wo gibts weitere Infos? Online

44 Fragen!? Uff...

45


Herunterladen ppt "COM-Programmierung mit Visual Basic 6 Michael Willers Microsoft GmbH."

Ähnliche Präsentationen


Google-Anzeigen