Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Dariusz Parys Developer Group Microsoft GmbH Interoperabilität Microsoft.NET und COM+

Ähnliche Präsentationen


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

1 Dariusz Parys Developer Group Microsoft GmbH Interoperabilität Microsoft.NET und COM+

2 2 Agenda Warum Interoperabilität? Integration mit COM Nutzung von COM+ Diensten API Aufrufe in native Win32 DLLs

3 Microsoft.NET und COM+ 3 Warum Interoperabilität? 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

4 Microsoft.NET und COM+ 4 Unterschiede.NET - COM.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

5 Microsoft.NET und COM+ 5 Interop Möglichkeiten 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

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

7 Microsoft.NET und COM+ 7 Drei Schritte zu COM Referenzieren eines Interop Assemblies Instanzieren des Typen mit new Nutzung der Funktionalität

8 Microsoft.NET und COM+ 8 Was ist ein Interop Assembly? 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

9 Microsoft.NET und COM+ 9 Woher bekomme ich ein Interop Assembly? Vorzugsweise vom Hersteller PIA (Primary Interop Assembly) In VS.NET durch Add References... Mit Hilfe des Tools TLBIMP.EXE

10 Microsoft.NET und COM+ 10 Interop Assemblies 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

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

12 Microsoft.NET und COM+ 12 Runtime Callable Wrapper 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

13 Microsoft.NET und COM+ 13 RCW bietet Transparenz Kein Referenzzähler Keine GUID Keine HRESULT, Fehler werden als Exception geworfen Kein QueryInterface, einfach ein cast auf das entsprechende Interface InvalidCastException E_NOINTERFACE

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

15 Microsoft.NET und COM+ 15 Denkanstöße 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 RCWs zu wrappen

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

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

18 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

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

20 Microsoft.NET und COM+ 20 COM Callable Wrapper 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

21 Microsoft.NET und COM+ 21 Design für Interoperabilität 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

22 Microsoft.NET und COM+ 22 Nützliche Informationen (1/2) Klasseninterface kann automatisch erzeugt werden In VB: Benutzung des ComClass Attributes In C#: Benutzung des ClassInterfaceType Attributes GUIDs werden beim Export automatisch erstellt Basierend auf Assembly und Typenbezeichnung Basierend auf kompletter Interfacebeschreibung

23 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

24 Microsoft.NET und COM+ 24 Interop Attribute Using System.Runtime.InteropServices [Guid(…), InterfaceType(ComInterfaceType.IsIUnknown)] Interface IFooBar { [DispId(64)] int Format( [MarshalAs(LPStr)] String s) } 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. * Attribute werden nicht nur für Interop genutzt

25 Microsoft.NET und COM+ 25 Parameter Umsetzung COM Method Signature HRESULT FormatDate(BSTR s, DATE d, [out, retval] int *retval); int FormatDate(String s, DateTime d);.NET Method Signature

26 Microsoft.NET und COM+ 26 Datentypen Umwandlung DATESystem.DateTime BSTRSystem.String Safearray( int )Int[] OLECOLORSystem.Drawing.Color CURRENCYSystem.Decimal VariantSystem.Object Interface Foo Coclass FooClass Foo

27 Microsoft.NET und COM+ 27 Mehr Marshaling… 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

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

29 Microsoft.NET und COM+ 29 Nicht Blittable Typen System.ArrayC-Style Array oder SafeArray System.Boolean1, 2 oder 4 Byte mit 1 oder -1 System.CharUnicode oder Ansi System.ClassKlasseninterface System.ObjectVariant oder Klasseninterface System.StringNullterminierter String oder BSTR System.ValueTypeStruktur

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

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

32 Microsoft.NET und COM+ 32 Was ist zu tun? 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

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

34 Microsoft.NET und COM+ 34 Beispiel 2: Transaktionen Using System.EnterpriseServices; [ assembly: ApplicationName( MeineApplikation ) ] [ assembly: ApplicationActivation( ActivationOption.Library ) ] Namespace Beispiel2 { [ Transaction( TransactionOption.Required ) ] public class TransaktionsKlasse : ServicedComponent { public TransaktionsKlasse() {} } }

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

36 Microsoft.NET und COM+ 36 In Win32 DLLs reinrufen

37 Microsoft.NET und COM+ 37 Platform Invoke (P/Invoke) Zugriff auf statische Einstiegspunkte von nativen DLLs Ä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

38 Microsoft.NET und COM+ 38 Platform Invoke Object Common Language Runtime Unmanaged DLL Client

39 Microsoft.NET und COM+ 39 Platform Invoke Beispiel #1 public class Win32API { [DllImport(User32.dll,EntryPoint=MessageB ox)] public static extern Boolean MsgBox(…); }

40 Microsoft.NET und COM+ 40 Platform Invoke Beispiel #2 [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); }

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

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

43 Microsoft.NET und COM+ 43 Wie sieht es mit Performance aus? 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?

44 Microsoft.NET und COM+ 44 Zusammenfassung 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

45 Microsoft.NET und COM+ 45 Links und Ressourcen So bringen Sie COM und.NET in Einklang dnbiblio/show_all.asp?siteid= dnbiblio/show_all.asp?siteid= Microsoft.NET / COM Migration and Interoperability us/dnbda/html/cominterop.asp us/dnbda/html/cominterop.asp

46 Microsoft.NET und COM+ 46 Fragen!? Uff...


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

Ähnliche Präsentationen


Google-Anzeigen