COM-Programmierung mit Visual Basic 6

Slides:



Advertisements
Ähnliche Präsentationen
C Sharp (C#) Martin Saternus Senior Student Partner
Advertisements

Imperative Programmierung
Programmierung II Prof. Dr. Michael Löwe
SQL Server 2005.NET Integration Sebastian Weber Developer Evangelist Microsoft Deutschland GmbH.
COM & Threading „The Basics“
COM-Schnittstellen optimal einsetzen
DI Christian Donner cd (at) donners.com
Objektorientierte Programmierung
Abstrakte Klassen HS Merseburg (FH) WS 06/07.
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Indirekte Adressierung
Java: Grundlagen der Sprache
Java: Referenzen und Zeichenketten
Java: Grundlagen der Objektorientierung
Komponentenbasierter Taschenrechner mit CORBA
MD 4/02 Hello World from CORBA ein erster Überblick.
Konstruktoren.
Polymorphie (Vielgestaltigkeit)
Objekte und Arbeitsspeicher
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 5 Polymorphismus Sommersemester 2003 Lars Bernard.
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 3 Klassen, Objekte, Arrays und Kontrollstrukturen Sommersemester 2003 Lars Bernard.
Programmieren mit JAVA
Programmieren mit JAVA
VB .NET Proseminar .NET SS04.
Introducing the .NET Framework
Remote Methode Invocation (RMI)
DVG Kommentare1 Kommentare. DVG Kommentare 2 Kommentare Es gibt zwei Arten von Kommentaren: einzeilige Kommentare // der Kommentar geht.
DVG Interfaces. DVG mehrfache Vererbung 4 Mehrfache Vererbung ist die Ableitung einer Klassen von mehreren anderen Klassen. –farbigerPunkt.
Abstrakte Klassen, Interface
DVG Klassen und Objekte
EDV Parallelprogrammierung1 Parallelprogrammierung mit JAVA.
RelationentheorieObjektorientierte Datenbanken AIFB SS Das ODMG-Objektmodell vs. relationales Modell (1/9) ODMG-Objektmodell Literal_type Atomic_literal.
Handling und Erstellung von: DLL, EXE, COM, DCOM
Erstellen von COM-Servern in Visual FoxPro 9.0 deutschsprachige FoxPro User Group Rainer Becker Microsoft Visual FoxPro 9.0 Roadshow COM.
Uwe Habermann WPF Avalon Formulare aus VFP verwenden Venelina Jordanova
Presenter: Daniel Walzenbach Technologieberater
MSDN Webcast: VB.NET für Einsteiger und Umsteiger, Teil 10 Die erste, eigene Klassenbibliothek (Level 100) Presenter: Daniel Walzenbach Technologieberater.
Presenter: Daniel Walzenbach Technologieberater
Common Object Request Broker anhand eines Beispiels Aufgabestellung ( Ein Konto wird von einem Server verwaltet. Der Stand des Kontos wird.
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
Was umfaßt die CORBA Core Spezifikation? Welche zusätzlichen Komponenten muß ein ORB Produkt beinhalten? Core: CORBA Objekt Modell CORBA Architektur OMG.
University of Applied Sciences Übung Objektorientierte Programmierung II Dipl.-Inf. (FH) Markus Vogler.
Entwicklung verteilter Anwendungen I, WS 13/14 Prof. Dr. Herrad Schmidt WS 13/14 Kapitel 12 Folie 2 Web Services (1)
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Reiner Ganser Solution Architect 1stQuad Solutions GmbH Presentation Subtitle.
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Windows Presentation Foundation, Vorlesung Wintersemester 2013/14 Prof. Dr. Herrad Schmidt WS 13/14 Kapitel 2 Folie 2 XAML (1) s.a.
Entwicklung verteilter Anwendungen I, WS 13/14 Prof. Dr. Herrad Schmidt WS 13/14 Kapitel 1 Folie 2 Microsoft.NET Framework: Quelle:
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Welchen Problemen ist man bei heterogener, verteilter Programmierung ausgesetzt? Hardware: nicht einheitliche, inkompatible Systeme, verschiedene Leistungsfähigkeit.
Vortrag: Visual Basic Neuerungen Autor : Dennis Hoyer
Herbers Excel-Server - der Workshop
Office in Java 2. Info-Point Urs Frei.
Variablen in Programmiersprachen
EPROG Tutorium #6 Philipp Effenberger
MTS Microsoft Transaction Server Martin Basziszta
Learning By Doing Parallelverarbeitung Multithreading (Nebenläufigkeit) Alte Idee der Parallelverarbeitung statt rein sequentieller Prozesse Parallelverarbeitung.
Objektorientierung.
Voyager Eigenschaften/Vorzüge Universalität: –ROI-Modelle: CORBA, RMI, DCOM –verschiedene Namens-, Verzeichnisdienste Nachrichtentypen: synchron, oneway,
Die AppDomain Das unbekannte Wesen?
Objekte und Literale ODMG-Objektmodell kennt zwei Arten von Datenelementen: Literale: Identität ist ausschließlich durch Wert gegeben. Nur maximal eine.
A Workshop About this chapter General description Units Time Schedule
MD 4/02 CORBA Static/Dynamic Invocation Interface (SII/DII), Interface Repository.
Programmierung mit ArcObjects Frank Münster Proseminar Geoinformation II.
Einführung in Java PING e.V. Weiterbildung Andreas Rossbacher 24. März 2005.
Reflection API1 Motivation Reflection API Core Reflection API: java.lang.reflect Seit JDK 1.1 integraler Bestandteil der Java- Klassenbibliothek Ermöglicht:
Patrick Richterich Lattwein GmbH Web Services Softwareentwicklung mit SOAP.
C++ FÜR cOMPUTERSPIELENTWICKLER
Konstruktoren.
 Präsentation transkript:

COM-Programmierung mit Visual Basic 6 Michael Willers mwillers@microsoft.com Microsoft GmbH

Agenda Warum COM und VB? Wie funktioniert‘s? Wo gibt‘s weitere Info‘s?

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

Wie funktioniert‘s? Objektorientierung unter VB - Klassen 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 funktioniert‘s? Objektorientierung unter VB - Events 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 funktioniert‘s? Objektorientierung unter VB - Events 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

Demo

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

Wie funktioniert‘s? Schnittstellenorientierte Programmierung 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 funktioniert‘s? Versionierung von Schnittstellen 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

Demo

Wie funktioniert‘s? Wann rufe ich New... auf? 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 funktioniert‘s? Wann wird ein Objekt „entsorgt“? 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 funktioniert‘s? Frühe und späte Bindung 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)

Demo

Wie funktioniert‘s? COM-Grundsätzliches 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 funktioniert‘s? Beschreibung von Schnittstellen 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 funktioniert‘s? Beschreibung von Schnittstellen 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 funktioniert‘s? COM-Schnittstellen, Tipps & Hinweise 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 funktioniert‘s? Datentypen IDL C++ Java Visual Basic Script small char byte N/A nein short short short Integer ja long long int Long ja hyper __int64 long N/A nein unsigned small unsigned char byte Byte nein unsigned short unsigned short short N/A nein unsigned long unsigned long int N/A nein unsigned hyper unsigned __int64 long N/A nein float float float Single ja double double double Double ja char char char N/A nein unsigned char unsigned char byte Byte ja wchar_t wchar_t char Integer nein

Wie funktioniert‘s? Datentypen IDL C++ Java Visual Basic Script byte unsigned char char N/A nein BYTE unsigned char byte Byte ja boolean long int Long nein VARIANT_BOOL VARIANT_BOOL boolean Boolean ja BSTR BSTR java.lang.String String ja VARIANT VARIANT com.ms.com.Variant Variant ja CY long int Currency ja DATE double double Date ja enum enum int Enum ja Typed ObjRef IFoo * interface IFoo IFoo ja struct struct final class Type nein union union N/A N/A nein C-Array array array N/A nein

Wie funktioniert‘s? 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

Demo

Wie funktioniert‘s? Der Service Control Manager (SCM) OLE32.DLL carserver.dll Service Control Manager OLE32.DLL carclient.exe OLE32.DLL carclient.exe Service Control Manager (RPCSS.EXE)

Wie funktioniert‘s? Anlegen eines COM-Objekts 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 funktioniert‘s? HKEY_CLASSES_ROOT CFord CLSID @={CLSID_CFord} InprocServer32 C:\CarServer.dll ProgID @=CFord

Wie funktioniert‘s? New und CreateObject Objekt wird direkt auf Basis der CLSID erzeugt CreateObject ProgID wird in CLSID umgewandelt Objekt wird auf Basis der CLSID erzeugt

Wie funktioniert‘s? Was ist eine ClassFactory? 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

Demo

Wie funktioniert‘s? COM-Server 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 läuft in eigenem Prozess läuft auf einer anderen Maschine

Wie funktioniert‘s? COM-Server 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 funktioniert‘s? Threading 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

Demo

Wie funktioniert‘s? Universal Marshaller 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 funktioniert‘s? Universal Marshaller und die Registry HKEY_CLASSES_ROOT CLSID Interface {CLSID_UniMarsh} {IID_IPager} {IID_IMessageSource} @=PSOAInterface @=IPager @=IMessageSource InprocServer32 ProxyStubClsid32 ProxyStubClsid32 @=oleaut32.dll @={CLSID_UniMarsh} @={CLSID_UniMarsh} ThreadingModel=both TypeLib

Demo

Wie funktioniert‘s? DCOM: Allgemeine Tipps 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 funktioniert‘s? DCOM: ByRef und ByVal 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 funktioniert‘s? DCOM: Objekte 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

Demo

Wie funktioniert‘s? Tipps & Hinweise 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++

Wo gibt’s weitere Info’s? Online msdn www.microsoft.com/germany/msdn www.microsoft.com/germany/msdn/quickie TechTalk www.microsoft.com/germany/msdn/techtalk microsoft.public.de.german.entwickler.techtalk Sites www.wrox.com (à Büchersuche)

Wo gibt’s weitere Info’s? Online Bücher Programming Distributed Applications... Ted Pattison ISBN 1-57231-961-5 Microsoft Press COM IDL and Interface Design ISBN 1-86100-235-4 Wrox Press Zeitschriften basicpro Microsoft System Journal, 6/99, Seite 85

Fragen!? Uff...