1 / 45

Interoperabilität

Interoperabilität. Microsoft .NET und COM+. Dariusz Parys Developer Group Microsoft GmbH Email: dparys@microsoft.com. Agenda. Warum Interoperabilität? Integration mit COM Nutzung von COM+ Diensten API Aufrufe in native Win32 DLL’s. Warum Interoperabilität?. Sicherung der Investitionen

kishi
Download Presentation

Interoperabilität

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Interoperabilität Microsoft .NET und COM+ Dariusz Parys Developer Group Microsoft GmbH Email: dparys@microsoft.com

  2. Agenda • 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? • 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. .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 Unterschiede .NET - COM 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 Microsoft .NET und COM+

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

  7. Drei Schritte zu COM • Referenzieren eines Interop Assemblies • Instanzieren des Typen mit „new“ • Nutzung der Funktionalität 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 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 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 Microsoft .NET und COM+

  11. ? COM Objekt aus .NET Managed Unmanaged Reference Counted Traced Reference COM Objekt Client Runtime Callable Wrapper IUnknown IFoo 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 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 Microsoft .NET und COM+

  14. Demo COM Objekt in .NET nutzen 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 RCW’s zu wrappen Microsoft .NET und COM+

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

  17. 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. IUnknown ? IFoo COM Objekt aus .NET Unmanaged Managed Traced Reference Reference Counted .NET Objekt Client COM Callable Wrapper 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 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 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 • 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 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. COM Method Signature HRESULT FormatDate(BSTR s, DATE d, [out, retval] int *retval); int FormatDate(String s, DateTime d); .NET Method Signature Parameter Umsetzung Microsoft .NET und COM+

  26. Datentypen Umwandlung 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 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 Microsoft .NET und COM+

  29. Nicht Blittable Typen 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. 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 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! } }} 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() {} }} 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) • 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. public class Win32API { [DllImport(“User32.dll”,EntryPoint=“MessageBox”)] public static extern Boolean MsgBox(…); } Platform Invoke Beispiel #1 Microsoft .NET und COM+

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

  40. String vs. Stringbuilder • 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+

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

  42. 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? Microsoft .NET und COM+

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

  44. Links und Ressourcen • So bringen Sie COM und .NET in Einklang • http://www.microsoft.com/germany/ms/msdnbiblio/show_all.asp?siteid=500418 • Microsoft .NET / COM Migration and Interoperability • http://msdn.microsoft.com/library/en-us/dnbda/html/cominterop.asp Microsoft .NET und COM+

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

More Related