COM-Schnittstellen optimal einsetzen

Slides:



Advertisements
Ähnliche Präsentationen
Einführung in die Programmiersprache C/C++
Advertisements

Imperative Programmierung
der Universität Oldenburg
DVG Dateien Dateien. DVG Dateien 2 Die Klasse File Die Klasse File stellt die Verbindung zwischen dem Filesystem des Rechners und dem.
SQL Server 2005.NET Integration Sebastian Weber Developer Evangelist Microsoft Deutschland GmbH.
COM & Threading „The Basics“
COM-Programmierung mit Visual Basic 6
Interoperabilität Microsoft .NET und COM+ Dariusz Parys
DI Christian Donner cd (at) donners.com
Migration und Nutzung von vorhandenem Code Interoperability.
der Universität Oldenburg
Java: Dynamische Datentypen
Indirekte Adressierung
FH-Hof Indirekte Adressierung Richard Göbel. FH-Hof Einfache Speicherung von Daten Eine "einfache" Deklaration definiert direkt eine Speicherplatz für.
Java: Grundlagen der Sprache
Java: Referenzen und Zeichenketten
Java: Grundlagen der Objektorientierung
Strukturen. In einer Struktur kann eine beliebige Anzahl von Komponenten (Daten) mit unterschiedlichen Datentypen (im Gegensatz zu Feldern) zusammengefaßt.
Konstruktoren.
Objekte werden als Adressen (Referenzen) übergeben. Dies führt manchmal zu unerwarteten Ergebnissen...
Polymorphie (Vielgestaltigkeit)
Polymorphie (Vielgestaltigkeit)
Objekte und Arbeitsspeicher
XINDICE The Apache XML Project Name: Jacqueline Langhorst
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 3 Klassen, Objekte, Arrays und Kontrollstrukturen Sommersemester 2003 Lars Bernard.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 7 Claudio Moraga, Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
Programmieren mit JAVA
PKJ 2005/1 Stefan Dissmann Methoden (Motivation) Idee: Identische Programmabschnitte zusammenfassen und mit einem Namen versehen Vorteile: Übersichtlichkeit.
PKJ 2005/1 Stefan Dissmann Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit.
PKJ 2005/1 Stefan Dissmann Zusammenfassung Vorwoche Methoden sind mit einem Namen versehene Programmabschnitte besitzen Rückgabetyp, Namen, Parameterliste.
Die Skriptsprache Perl (8) Wolfgang Friebel DESY Zeuthen.
EDV1 - Komplexe Datentypen
Einführung in Visual C++
DVG Kommentare1 Kommentare. DVG Kommentare 2 Kommentare Es gibt zwei Arten von Kommentaren: einzeilige Kommentare // der Kommentar geht.
DVG Felder1 Felder. DVG Felder 2 Was sind Felder? Felder sind Reihungen aus endlich vielen Elementen gleichen Typs. Z.B.: Vektoren : (x.
Arrays,Strings&Pointer in C/C++
DVG Kommentare 1 Kommentare. 2 Kommentare Es gibt zwei Arten von Kommentaren: einzeilige Kommentare // der Kommentar geht bis zum Ende der Zeile.
Handling und Erstellung von: DLL, EXE, COM, DCOM
Seite Common Gateway Interface. Konzepte. Übersicht 1Einleitung 2Was ist CGI? 3Wozu wird CGI verwendet? 4Geschichtlicher Überblick 5Grundvoraussetzungen.
Presenter: Daniel Walzenbach Technologieberater
Informatik 1 Übung 8. NACHBESPRECHUNG Übung 8 Rekursion Existiert Weg von A nach B?
SQL Server 2005 CLR-Integration
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Einführung in die Programmiersprache C 4
Informatik 1 Letzte Übung.
Vom Umgang mit Daten. public void myProgram() { int[] saeulenWerte = new int[world.getSizeX()]; for (int i = 0; i < saeulenWerte.length; i++) { saeulenWerte[i]
HORIZONT 1 XINFO ® Das IT - Informationssystem PL/1 Scanner HORIZONT Software für Rechenzentren Garmischer Str. 8 D München Tel ++49(0)89 / 540.
Vortrag: Visual Basic Neuerungen Autor : Dennis Hoyer
Herbers Excel-Server - der Workshop
Office in Java 2. Info-Point Urs Frei.
CuP - Java Vierte Vorlesung Entspricht ungefähr Kapitel 2.1 des Skriptums Montag, 14. Oktober 2002.
MTS Microsoft Transaction Server Martin Basziszta
early binding (frühe Bindung) late binding (späte Bindung)
Informatik I : Software höhere Programmiersprachen Java Klassen: hat Methoden (Funktionen) und Daten (Variablen) es kann mehrere Klassen geben nur eine.
C Tutorium – Shared Memory – Knut Stolze. 2 Shared Memory Ein Speicherbereich, auf den mehrere Prozesse Zugriff haben – Also kein privater Speicher –
9.3 COM und DCOM (Microsoft ) COM – Component Object Model
Tutorium Software-Engineering SS14 Florian Manghofer.
Tutorium Software-Engineering SS14 Florian Manghofer.
Tutorium Software-Engineering SS14 Florian Manghofer.
Pointer, Arrays und verkettete Listen. Mehrdimensionale Arrays  Pointer auf ein Array von Pointern  int32 **matrix = new int32*[3];  matrix: Zeiger.
C++ FÜR cOMPUTERSPIELENTWICKLER
Pointer. * und &  Bei der Definition int var1; ○ // „normale“ Variable int *var2; ○ // Zeiger auf einen Integer int *var2 = NULL; ○ // … incl. Initialisierung.
1. Die rekursive Datenstruktur Liste 1.5 Das Entwurfsmuster Kompositum
Implementieren von Klassen
Felder in der Informatik
 Präsentation transkript:

COM-Schnittstellen optimal einsetzen Michael Willers mwillers@microsoft.com Microsoft GmbH

Agenda Warum IDL? Wie funktioniert‘s? Wo gibt‘s weitere Info‘s?

Warum IDL?

Warum IDL? Wie kann ich mit Visual C++... ...Felder an ASP-Scripts übergeben? ...Datenstrukturen abbilden und verwenden? ...Zeichenketten optimal einsetzen? ...

Wie funktioniert‘s? Versionierung von Schnittstellen in VB No compatibility Sämtliche GUIDs werden neu erstellt Typenbibliothek CoKlassen (CLSID) Schnittstellen (IID) Project compatibility VB5: CLSID und IID werden neu generiert VB6: nur die IIDs werden neu generiert Binary compatibility Sämtliche GUIDs bleiben erhalten

Wie funktioniert‘s? Versionierung von Schnittstellen in VB

Wie funktioniert‘s? Versionierung von Schnittstellen in VB Die Auslieferung neuer Client- und Serverversionen erfolgt... ...zusammen: Binary Compatibility reicht völlig aus ...getrennt: Definieren Sie Ihre Schnittstellen direkt mit der IDL

Wie funktioniert‘s? Versionierung von Schnittstellen in VB Achtung: Wenn Sie per New ein neues Objekt erstellen, passieren unter VB6 folgende Dinge: Aufruf von CoCreateInstance mit IUnknown Aufruf von QueryInterface mit der IID der Standardschnittstelle Der Aufruf von QueryInterface erfolgt grundsätzlich!

Wie funktioniert‘s? Versionierung von Schnittstellen in VB Ein mit VB6 erstellter Client ist grundsätzlich von der IID der Standardschnittstelle abhängig – egal ob er diese benutzt oder nicht!!! Never use Project Compatibility!!!

Wie funktioniert‘s? Felder und Strukturen

Wie funktioniert‘s? Übergabe von Feldern an VB-Script Felder werden grundsätzlich mit dem Typ SAFEARRAY abgebildet In der IDL-Datei für Scripting Clients immer als VARIANT* deklarieren!!! Feldelemente müssen grundsätzlich vom Typ VARIANT sein Indexüberprüfung mit den Funktionen LBound oder Ubound klappt immer Aber: „Type mismatch“ beim Elementzugriff

Wie funktioniert‘s? Aufzählungen (enums) und Strukturen Mit dem Attribut v1_enum werden enum-Werte als 32bit-Werte interpretiert sonst 16bit Seit N4 SP4 kann der Universal Marshaler (OLEAUT32.DLL) auch mit Strukturen umgehen Proxy/Stub-Marshaling nicht mehr notwendig Windows 95 benötigt DCOM 1.2 oder höher In allen Versionen von Windows 98 sowie Windows 2000 fest eingebaut

Wie funktioniert‘s? SAFEARRAY mit Strukturen

Wie funktioniert‘s? SAFEARRAYs mit Schnittstellenzeigern SAFEARRAY* SafeArrayCreateVectorEx( VARTYPE vt, // VT_UNKNOWN | FADF_HAVEIID UINT uLBound, UINT nSize, SAVEARRAYBOUND* psaBound, PVOID pvExtra /*pvExtra: IID* */ ); SAFEARRAY *psa; psa = SafeArrayCreateVectorEx( VT_UNKNOWN | FADF_HAVEIID, 0, 10, &IID_IMyInterface );

Wie funktioniert‘s? Schnittstellenzeiger Schnittstellentyp zur Compilierzeit festlegen HRESULT GetSth([out] ISth **ppISth); Schnittstellentyp zur Laufzeit festlegen HRESULT GetInterfacePtr( [in] REFIID riid, [out, iid_is(riid)] void **ppv );

Wie funktioniert‘s? Stringkonstanten und Win32-API

Wie funktioniert‘s? Stringkonstanten [ uuid(90c05dc7-0d82-43de-803e-527f32c2a32d), version(1.0) ] library StringConstants { module Constants [ helpstring("Zitatzeichen") ] const LPSTR vbSingleQuote = "'"; [ helpstring("Anfuehrungszeichen") ] const LPSTR vbQuote = "\""; };

Wie funktioniert‘s? Win32-API [ uuid(1ba14ad2-566e-478b-88aa-db3046a0eb49), version(1.0) ] library MyTestLib { [dllname("KERNEL32")] module MyKernel32 [entry("RtlMoveMemory"),helpstring(„memcpy“)] void _stdcall RtlMoveMemory( void* pvDst, void* pvSrc, long cbCopy ); };

Wie funktioniert‘s? Der Universal Marshaler OLEAUT32.DLL enthält den Universal Marshaler, der Marshaling auf Basis von TypeLibraries durchführen kann Schnittstellen in der TypeLibrary müssen das IDL-Attribut [dual] oder [oleautomation] aufweisen TypeLibraries müssen auf Client UND Server registriert werden REGTLIB.EXE (ruft RegisterTypeLib auf) Parameter vom Methoden müssen “VARIANT-compliant” sein

Wie funktioniert‘s? Richtungsattribute für Parameter [in] Instanz wird vor Aufruf von Client zum Server übertragen Client muss Instanz zerstören implementierbar in VB (ByVal)

Wie funktioniert‘s? Richtungsattribute für Parameter [out] Instanz wird nach Aufruf von Server zum Client übertragen Parametertyp muß ein Pointer sein Server erzeugt Instanz Client muß Instanz zerstören nicht implementierbar in VB

Wie funktioniert‘s? Richtungsattribute für Parameter [out, retval] wie out, kann von Sprachen aber als Rückgabewert einer Funktion interpretiert werden VB-Objektkatalog muss letzter Parameter sein implementierbar in VB

Wie funktioniert‘s? Richtungsattribute für Parameter [in, out] Instanz wird vor Aufruf von Client zum Server übertragen nach Aufruf von Server zum Client übertragen sofern der Server andere Instanz zurückgibt, muss alte Instanz im Server zerstört und die zurückgegebene Instanz neu angelegt werden Client muss Instanz zerstören implementierbar in VB (ByRef)

Wie funktioniert‘s? C-Arrays und C-Strings

Wie funktioniert‘s? CoTaskMemAlloc und CoTaskMemFree referenzierter Speicher... ...muß im Serverprozess mit CoTaskMemAlloc angelegt werden ...wird im Serverprozess nach „Aufruf“ durch den Stub mit CoTaskMemFree zerstört ...wird im Clientprozess nach „Rückkehr“ durch den Proxy mit CoTaskMemAlloc neu angelegt und initialisiert muß im Clientprozess mit CoTaskMemFree zerstört werden

Wie funktioniert‘s? C-Arrays [length_is] Stub übertragt ausschliesslich Netto-Daten Leere Feldelemente werden ignoriert [size_is] Feldgrösse wird zur Laufzeit bestimmt Feldgrössen darf nur von [in] oder [in,out] Parametern abhängen

Wie funktioniert‘s? C-Arrays [size_is(,10)] Zeiger, der auf einen Zeiger verweist, der auf ein Feld mit 10 Elementen zeigt [size_is(10,)] Zeiger auf ein Feld mit 10 Zeigern HRESULT GetData3( [in, out] int* pnCount, [out, size_is(,*pnCount)] unsigned char** ppBuffer ); // **ppBuffer zeigt auf einen weiteren Zeiger *ppBuffer // *ppBuffer zeigt auf ein Feld mit (*pnCount) Elementen // vom Typ unsigned char

Wie funktioniert‘s? C-Strings Variable vom Typ char* oder ein wchar_t* zeigt auf einen nullterminierten String HRESULT F([in, string] char* psz); Attribut bezieht sich immer auf den Zeiger, der char oder wchar_t referenziert HRESULT F([out, string] char **ppsz);

Wie funktioniert‘s? Zeigerdatentypen HRESULT f1([in, out] LONG* pl1, [in, out] LONG* pl2); Problem 1: (&l1, &l2) Dereferenzierte Daten müssen übertragen werden Problem 2: f1(&l1, NULL) Dereferenzieren des NULL Pointers Problem 3: f1(&l1, &l1) mehrfaches Dereferenzieren des gleichen Zeigers

Wie funktioniert‘s? Zeigerdatentypen Unique Pointers IDL-Attribut [unique] NULL-Pointer zulässig mehrfach referenzierte Daten werden mehrfach übertragen Default-Wert in ATL-Projekten Ändern mit dem IDL-Attribut [pointer_default]

Wie funktioniert‘s? Zeigerdatentypen Reference Pointers IDL-Attribut [ref] NULL-Pointer unzulässig mehrfach referenzierte Daten werden mehrfach übertragen zwingend für Parameter mit dem Attribut [out] und [out, retval] Stub prüft auf Gültigkeit, somit werden unnötige Roundtrips eingespart!

Wie funktioniert‘s? Zeigerdatentypen Full Pointers IDL-Attribut [ptr] NULL-Pointer zulässig mehrfach referenzierte Daten werden nur einmal übertragen Marshaling über Prozeßgrenzen hinweg wird durch die Überprüfung aller Zeiger auf Überschneidungen zeitaufwendiger Attribut immer dann angeben, wenn zwei Zeiger auf den gleichen Speicherbereich verweisen long l1; HESULT f1(&l1,&l1);

Wie funktioniert‘s? top level und embedded pointer struct MyStruct { [ref] LONG* pl; } HRESULT F1(MyStruct* pMyStruct); HRESULT F2(LONG** ppl); embedded pointer top level pointer top level pointer embedded pointer

Wie funktioniert‘s? Marshaling von embedded pointern HRESULT f1([out] LONG** ppl1); Aufruf: f1(&l1); Process 1 Process 2 pl1:NULL pl1:... f1(&pl1) Proxy Stub Obj 5 ? pl1:... pl1:NULL 5

Wie funktioniert‘s? Marshaling von top level pointern HRESULT f1([in, out] LONG* pl1, [in, out] LONG* pl2); Aufruf: f1(&l1, &l2); Process 1 Process2 l1:7 l1:3 l2:1 l2:5 f1(&l1, &l2) Proxy Stub Obj l1:3 l1:7 l2:1 l2:5

Wie funktioniert‘s? Strukturen mit Zeigern

Wie funktioniert‘s? Proxy/Stub-Marshaling-Code generieren Interface muß ausserhalb der Library Section stehen Interface darf nicht Attribut [local] haben MyFile_i.c, MyFile_p.c, dlldata.c kompilieren und linken in ATL Projekten: NMAKE MyFilePS.mk REGSVR32 MyFilePS.dll

Wie funktioniert‘s? C-Strings, C-Arrays, Zeiger-Strukturen IDL-Attribute für Arrays und Strings werden nicht in TLB beschrieben Proxy/Stub-Marshaling zwingend erforderlich Proxy/Stub DLL muss erstellt und auf Client- und Server registriert werden REGSVR32.EXE

Wie funktioniert‘s? Einschränkungen für Visual Basic nur VB-kompatible Datentypen keine C-Arrays keine C-Strings enum: ja struct: ja, wenn Member keine Zeiger keine [out] Parameter

Wo gibt’s weitere Info’s? msdn online http://www.microsoft.com/germany/msdn TechTalk www.microsoft.com/germany/msdn/techtalk Bücher COM IDL and Interface Design ISBN 1-86100-235-4 Zeitschriften Microsoft System Journal 6/99, Seite 85

Fragen!? Uff...