3 interop part2

10
Interoperation, Teil 2 C# Workshop TU Darmstadt Qiong Wu – Microsoft Student Partner

Upload: qiong-wu

Post on 10-May-2015

522 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: 3 Interop Part2

Interoperation, Teil 2

C# Workshop TU DarmstadtQiong Wu – Microsoft Student Partner

Page 2: 3 Interop Part2

Tlbimp vs. Manueller Import Tlbimp generiert einen COM to .net Wrapper

COM CoClasses werden zu C# Klassen mit parameterlosem Konstruktor konvertiert

COM structs werden zu C# structs mit public fields konvertiert

Tlbimp kann nicht verwendet werden wenn Keine Typelib vorhanden ist Tlbimp Definitionen nicht verarbeiten kann

Alternativer Ansatz Manueller Import

Page 3: 3 Interop Part2

Manueller Import - AttributeComImport – Markiert eine Klasse als

extern implementierte COM Klasse.Guid – Setzt den universally unique

identifier (UUID) für eine Klasse oder ein Interface

InterfaceType – Legt fest ob ein Interface von IDispatch oder IUnknown erbt

PreserveSig – Legt fest ob ein nativer Rückgabewert von einem HRESULT zu einer .net Exception umgewandelt werden soll

Page 4: 3 Interop Part2

Manueller Import – COM CoClass

CoClass als Klasse deklarieren Darf von keiner anderen Klasse erben Darf keine Interfaces implementieren GUID Attribut setzen

Instanziieren mit new Schlüsselwort C# Äquivalent zu CoCreateInstance Parameterloser Konstruktor

Page 5: 3 Interop Part2

Manueller Import – COM Interface

C# Interface erstellen mit Attributen COMImport GUID

Muss Interface Member Funktionen in der exakten COM interface Reihenfolge enthalten

Ggf. Standard Marshalling mit MarshalAs überschreiben

Exception Mapping zwischen COM & .net festlegen

Page 6: 3 Interop Part2

CoClasses & Interfaces in .net verwenden

CoClass instanziieren Entsprechendes Interface casten

Page 7: 3 Interop Part2

Marshalling

Standardmarshalling konvertiert Datentypen von COM in .net & vice versa

Anpassung von Marshalling ist ggf. notwendig

Verwenden von MarshalAs um Marshalling anzupassen

Page 8: 3 Interop Part2

Unmanaged Events

COM Events werden wie C# Events behandelt

Events nach COM auslösen von C# aus

Page 9: 3 Interop Part2

Customize Wrappers

RCW Erstellen RCW

Disassemblieren

Source anpassen

RCW Neu kompilieren

Page 10: 3 Interop Part2

Links

.net Reflector http://www.red-gate.com/products/

reflector/ Windows SDK

http://msdn.microsoft.com/de-de/windows/dd146047(en-us).aspx