3 interop part2

Post on 10-May-2015

522 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Interoperation, Teil 2

C# Workshop TU DarmstadtQiong Wu – Microsoft Student Partner

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

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

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

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

CoClasses & Interfaces in .net verwenden

CoClass instanziieren Entsprechendes Interface casten

Marshalling

Standardmarshalling konvertiert Datentypen von COM in .net & vice versa

Anpassung von Marshalling ist ggf. notwendig

Verwenden von MarshalAs um Marshalling anzupassen

Unmanaged Events

COM Events werden wie C# Events behandelt

Events nach COM auslösen von C# aus

Customize Wrappers

RCW Erstellen RCW

Disassemblieren

Source anpassen

RCW Neu kompilieren

Links

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

reflector/ Windows SDK

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

top related