Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Interoperabilität Microsoft .NET und COM+ Dariusz Parys

Ähnliche Präsentationen


Präsentation zum Thema: "Interoperabilität Microsoft .NET und COM+ Dariusz Parys"—  Präsentation transkript:

1 Interoperabilität Microsoft .NET und COM+ Dariusz Parys
MSDN TechTalk – Februar 2002 Interoperabilität – Microsoft .NET und COM+ 1 Interoperabilität Microsoft .NET und COM+ Dariusz Parys Developer Group Microsoft GmbH

2 Warum Interoperabilität? Integration mit COM Nutzung von COM+ Diensten
Agenda MSDN TechTalk – Februar 2002 Interoperabilität – Microsoft .NET und COM+ 2 Warum Interoperabilität? Integration mit COM Nutzung von COM+ Diensten API Aufrufe in native Win32 DLL’s Microsoft .NET und COM+

3 Warum Interoperabilität?
MSDN TechTalk – Februar 2002 Interoperabilität – Microsoft .NET und COM+ 3 Sicherung der Investitionen Entwicklungskosten Stabilität der Software Bestehende Funktionalität nutzen und diese Erweitern Zeitgewinn Mehrwert durch neue Möglichkeiten Langsames Ersetzen der Software Migration: Schritt für Schritt Manchmal hat man keine andere Wahl Microsoft .NET und COM+

4 Unterschiede .NET - COM .NET Framework Typen Standard Metadaten
MSDN TechTalk – Februar 2002 Interoperabilität – Microsoft .NET und COM+ 4 .NET Framework Typen Standard Metadaten Interface basierend New operator Cast operator Exceptions Managed Object Lifetime Strong Names COM / DLL Modell Binärer Standard Typbibliotheken Objekt basierend CoCreateInstance QueryInterface HResults Referenzzähler GUIDS Microsoft .NET und COM+

5 Interop Möglichkeiten
MSDN TechTalk – Februar 2002 Interoperabilität – Microsoft .NET und COM+ 5 COM Interop COM Objekte aus der .NET Welt nutzen .NET Objekte aus der COM Welt nutzen COM+ Dienste in .NET nutzen Platform Invoke Service (PInvoke) Native Win32 API Aufrufe aus .NET heraus Microsoft .NET und COM+

6 COM Objekte aus .NET nutzen
Microsoft .NET und COM+

7 Referenzieren eines Interop Assemblies
Drei Schritte zu COM MSDN TechTalk – Februar 2002 Interoperabilität – Microsoft .NET und COM+ 7 Referenzieren eines Interop Assemblies Instanzieren des Typen mit „new“ Nutzung der Funktionalität Microsoft .NET und COM+

8 Was ist ein Interop Assembly?
MSDN TechTalk – Februar 2002 Interoperabilität – Microsoft .NET und COM+ 8 Enthält keinerlei ausführbaren Code Nur Typendefinitionen die im COM Objekt implementiert sind Grundlage für den RCW zur Laufzeit um die Typen zu binden Grundlage für das Marshaling der Daten zwischen beiden Welten Microsoft .NET und COM+

9 Woher bekomme ich ein Interop Assembly?
MSDN TechTalk – Februar 2002 Interoperabilität – Microsoft .NET und COM+ 9 Vorzugsweise vom „Hersteller“ PIA (Primary Interop Assembly) In VS .NET durch „Add References...“ Mit Hilfe des Tools TLBIMP.EXE Microsoft .NET und COM+

10 Interop Assemblies müssen zur Laufzeit verfügbar sein
MSDN TechTalk – Februar 2002 Interoperabilität – Microsoft .NET und COM+ 10 Interop Assemblies müssen zur Laufzeit verfügbar sein Der Assembly Loader muß diese finden Installation ins Applikationsverzeichnis Einfaches XCOPY Oder Installation in den Global Assembly Cache Strong Name für Assembly (SN) Installation mit GACUTIL Microsoft .NET und COM+

11 ? COM Objekt aus .NET Traced Reference Reference Counted Runtime
Managed Unmanaged Traced Reference Reference Counted Client COM Objekt ? Runtime Callable Wrapper IUnknown IFoo Microsoft .NET und COM+

12 Runtime Callable Wrapper
MSDN TechTalk – Februar 2002 Interoperabilität – Microsoft .NET und COM+ 12 Proxy Objekt der Runtime Pro COM Objekt Instanz ein RCW Handhabt das Marshaling der Daten Verbirgt COM spezifische Aufrufe Bestimmte Interfaces wie IUnknown, IDispatch, etc… Stellt jedoch Interfaces des Objektes .NET zur Verfügung Microsoft .NET und COM+

13 RCW bietet Transparenz
MSDN TechTalk – Februar 2002 Interoperabilität – Microsoft .NET und COM+ 13 Kein Referenzzähler Keine GUID Keine HRESULT, Fehler werden als Exception geworfen Kein QueryInterface, einfach ein cast auf das entsprechende Interface InvalidCastException <-> E_NOINTERFACE Microsoft .NET und COM+

14 Demo COM Objekt in .NET nutzen Microsoft .NET und COM+

15 Ziel von COM Interop ist es existierende Funktionalität zu nutzen
Denkanstöße MSDN TechTalk – Februar 2002 Interoperabilität – Microsoft .NET und COM+ 15 Ziel von COM Interop ist es existierende Funktionalität zu nutzen Kein Ersatz für richtige “managed” Objekte Keine Konstruktoren Keine Vererbung Kein Überladen von Funmktionen Keine statischen Funktionen Überlegung RCW’s zu wrappen Microsoft .NET und COM+

16 .NET Objekte aus COM nutzen
Microsoft .NET und COM+

17 Erstellen einer Typenbibliothek Instanzieren des Objektes
Drei Schritte zu .NET Erstellen einer Typenbibliothek Instanzieren des Objektes CoCreateInstance Oder “new” in VB6 Nutzung der Funktionalität Microsoft .NET und COM+

18 Wie erstelle ich die Typenbibliothek?
Mit Visual Studio .NET Einstellung in den Projektproperties “Register for COM Interoperability” Manuell Mit TLBEXP.EXE und REGASM.EXE Microsoft .NET und COM+

19 ? COM Objekt aus .NET Traced Reference Reference Counted COM
Unmanaged Managed Reference Counted Traced Reference Client .NET Objekt ? COM Callable Wrapper IUnknown IFoo Microsoft .NET und COM+

20 Proxy für COM Clients um auf Managed Code zuzugreifen
COM Callable Wrapper MSDN TechTalk – Februar 2002 Interoperabilität – Microsoft .NET und COM+ 20 Proxy für COM Clients um auf Managed Code zuzugreifen Pro .NET Objekt Instanz ein CCW Handhabt das Marshaling der Daten Simuliert COM Interfaces wie IUnknown, IDispatch, etc… Verwendung von Klasseninterface per Attribute Microsoft .NET und COM+

21 Design für Interoperabilität
MSDN TechTalk – Februar 2002 Interoperabilität – Microsoft .NET und COM+ 21 Einschränkungen Nur öffentlich Typen sind Sichtbar Nur öffentliche Funktionen/Props sind sichtbar Shared/Static Member sind nicht erreichbar Überladene Funktionen haben andere Namen Benötigen einen public default Konstruktor Tips Funktionalität durch Interfaces verfügbar machen Custom Attributes um Marshaling zu beeinflußen Microsoft .NET und COM+

22 Nützliche Informationen (1/2)
MSDN TechTalk – Februar 2002 Interoperabilität – Microsoft .NET und COM+ 22 Klasseninterface kann automatisch erzeugt werden In VB: Benutzung des ComClass Attributes In C#: Benutzung des ClassInterfaceType Attributes GUID’s werden beim Export automatisch erstellt Basierend auf Assembly und Typenbezeichnung Basierend auf kompletter Interfacebeschreibung Microsoft .NET und COM+

23 Nützliche Informationen (2/2)
Assembly muß zur Laufzeit aufgelöst werden können Wird nicht über InProcServer32 aufgelöst Assemblies liegen im Applikationsverzeichnis Oder sind im Global Assembly Cache installiert Microsoft .NET und COM+

24 Interop Attribute MSDN TechTalk – Februar 2002 Interoperabilität – Microsoft .NET und COM+ 24 Mit Interop Attributen* kann man beim Export die Umsetzung auf COM Typen Definitionen beeinflußen. Dies gilt für Typen, Methoden, Eigenschaften, Felder oder Parameter. Using System.Runtime.InteropServices [Guid(…), InterfaceType(ComInterfaceType.IsIUnknown)] Interface IFooBar { [DispId(64)] int Format( [MarshalAs(LPStr)] String s) } * Attribute werden nicht nur für Interop genutzt Microsoft .NET und COM+

25 Parameter Umsetzung COM Method Signature
MSDN TechTalk – Februar 2002 Interoperabilität – Microsoft .NET und COM+ 25 COM Method Signature HRESULT FormatDate(BSTR s, DATE d, [out, retval] int *retval); int FormatDate(String s, DateTime d); .NET Method Signature Microsoft .NET und COM+

26 Datentypen Umwandlung
MSDN TechTalk – Februar 2002 Interoperabilität – Microsoft .NET und COM+ 26 DATE System.DateTime BSTR System.String Safearray( int ) Int[] OLECOLOR System.Drawing.Color CURRENCY System.Decimal Variant System.Object Interface Foo Coclass Foo Class Foo Microsoft .NET und COM+

27 Blittable Datentypen werden direkt übergeben
Mehr Marshaling… MSDN TechTalk – Februar 2002 Interoperabilität – Microsoft .NET und COM+ 27 Blittable Datentypen werden direkt übergeben z.B. Byte, Short, Integer, Long, Single, Double Einige Typen brauchen besondere Handhabung z.B. BOOLEAN: 2 oder 4 byte value, Wert True 1 oder -1 Microsoft .NET und COM+

28 System.Byte, System.SByte System.Int16, System.UInt16
Blittable Typen System.Byte, System.SByte System.Int16, System.UInt16 System.Int32, System.UInt32 System.Int64 System.IntPtr, System.UIntPtr Microsoft .NET und COM+

29 Nicht Blittable Typen System.Array C-Style Array oder SafeArray
System.Boolean 1, 2 oder 4 Byte mit 1 oder -1 System.Char Unicode oder Ansi System.Class Klasseninterface System.Object Variant oder Klasseninterface System.String Nullterminierter String oder BSTR System.ValueType Struktur Microsoft .NET und COM+

30 Demo Nutzung von .NET Objekten aus COM Microsoft .NET und COM+

31 COM+ Dienste in .NET Microsoft .NET und COM+

32 Namespace: System.EnterpriseServices
Was ist zu tun? MSDN TechTalk – Februar 2002 Interoperabilität – Microsoft .NET und COM+ 32 Namespace: System.EnterpriseServices Beinhaltet eine Vielzahl Attribute und Objekte Eigene Klasse ableiten von ServicedComponent Eventuell überschreiben der COM+ spezifischen Methoden Mit Attributen die entsprechenden Services definieren Microsoft .NET und COM+

33 Beispiel 1: ObjectPooling
MSDN TechTalk – Februar 2002 Interoperabilität – Microsoft .NET und COM+ 33 Namespace Beispiel1 { [ ObjectPooling( 5, 20 ) ] public class PooledKlasse : ServicedComponent { public PooledKlasse() {} // Überschreiben von CanBePooled protected override bool CanBePooled() { return true; // Notwendig damit Reused wird! } } } Microsoft .NET und COM+

34 Beispiel 2: Transaktionen
MSDN TechTalk – Februar 2002 Interoperabilität – Microsoft .NET und COM+ 34 Using System.EnterpriseServices; [ assembly: ApplicationName( “MeineApplikation” ) ] [ assembly: ApplicationActivation( ActivationOption.Library ) ] Namespace Beispiel2 { [ Transaction( TransactionOption.Required ) ] public class TransaktionsKlasse : ServicedComponent { public TransaktionsKlasse() {} } } Microsoft .NET und COM+

35 Demo Object Pooling mit .NET Microsoft .NET und COM+

36 In Win32 DLL’s reinrufen Microsoft .NET und COM+

37 Platform Invoke (P/Invoke)
MSDN TechTalk – Februar 2002 Interoperabilität – Microsoft .NET und COM+ 37 Zugriff auf statische Einstiegspunkte von nativen DLL’s Ähnlich: Declare statement aus VB 6 Load library / GetProcAddress Methoden Definitionen müssen mit Custom Attributes zur Verfügung gestellt werden Benutzt ebenfalls den COM Interop Marshaling Service Microsoft .NET und COM+

38 Common Language Runtime
Platform Invoke MSDN TechTalk – Februar 2002 Interoperabilität – Microsoft .NET und COM+ 38 Common Language Runtime Unmanaged DLL Object Client Microsoft .NET und COM+

39 Platform Invoke Beispiel #1
MSDN TechTalk – Februar 2002 Interoperabilität – Microsoft .NET und COM+ 39 public class Win32API { [DllImport(“User32.dll”,EntryPoint=“MessageBox”)] public static extern Boolean MsgBox(…); } Microsoft .NET und COM+

40 Platform Invoke Beispiel #2
MSDN TechTalk – Februar 2002 Interoperabilität – Microsoft .NET und COM+ 40 [StructLayout(LayoutKind.Sequential)] Public struct OSInfo ( uint MajorVersion; uint MinorVersion; String VersionString; } public class Win32API { [DllImport(“User32.dll”)] public static extern Boolean GetVersionEx(OSInfo osi); Microsoft .NET und COM+

41 String vs. Stringbuilder
MSDN TechTalk – Februar 2002 Interoperabilität – Microsoft .NET und COM+ 41 System.String Strings sind nicht veränderbar System.Text.StringBuilder Aufruf von API’s die einen Buffer erwarten, die StringBuilder Klasse einsetzen [C#] uint sz = 256; StringBuilder sb = new StringBuilder( ( int ) sz ); GetUserName( sb, ref sz ); Microsoft .NET und COM+

42 Demo Aufrufe mit P/Invoke Microsoft .NET und COM+

43 Wie sieht es mit Performance aus?
MSDN TechTalk – Februar 2002 Interoperabilität – Microsoft .NET und COM+ 43 Umwandlungen haben Overhead Ca. 30 Instruktionen pro Aufruf Daten Marshaling verursacht ebenfalls Overhead Abhängig von Typ und Größe Blittable Typen direkt Gezielt nutzen Nur aufrufen wenn es sein muß Alternativen in Betracht ziehen Kann man den Code vielleicht doch migrieren? Microsoft .NET und COM+

44 Interop kann bei der Migration behilflich sein
Zusammenfassung MSDN TechTalk – Februar 2002 Interoperabilität – Microsoft .NET und COM+ 44 Interop Services ermöglichen Nutzung bestehender und zukünftiger Funktionalität in beiden Welten Interop kann bei der Migration behilflich sein Nutzung der COM+ basierten Dienste für .NET Objekte Microsoft .NET und COM+

45 Microsoft .NET / COM Migration and Interoperability
Links und Ressourcen So bringen Sie COM und .NET in Einklang Microsoft .NET / COM Migration and Interoperability Microsoft .NET und COM+

46 Uff... Fragen!? Microsoft .NET und COM+ MSDN TechTalk – Februar 2002
Interoperabilität – Microsoft .NET und COM+ 46 Uff... Microsoft .NET und COM+


Herunterladen ppt "Interoperabilität Microsoft .NET und COM+ Dariusz Parys"

Ähnliche Präsentationen


Google-Anzeigen