Interoperation, Teil 2C# Workshop TU DarmstadtQiong Wu – Microsoft Student Partner
CCW in C++ verwenden
Tlbimp vs. Manueller ImportTlbimp generiert einen COM to .net WrapperCOM CoClasseswerdenzu C# KlassenmitparameterlosemKonstruktorkonvertiertCOM structswerdenzu C# structsmit public fields konvertiertTlbimp kann nicht verwendet werden wennKeine Typelib vorhanden istTlbimp Definitionen nicht verarbeiten kannAlternativer AnsatzManueller Import
Manueller Import - AttributeComImport – MarkierteineKlasseals extern implementierte COM Klasse.Guid – Setzt den universally unique identifier (UUID) füreineKlasseoderein InterfaceInterfaceType – Legt fest ob ein Interface von IDispatchoderIUnknownerbtPreserveSig – Legt fest ob einnativerRückgabewert von einem HRESULT zueiner.net Exception umgewandeltwerdensoll
Manueller Import – COM CoClassCoClass als Klasse deklarierenDarf von keineranderenKlasseerbenDarfkeine Interfaces implementierenGUID AttributsetzenInstanziieren mit new SchlüsselwortC# Äquivalent zu CoCreateInstanceParameterloser Konstruktor
Manueller Import – COM InterfaceC# Interface erstellen mit AttributenCOMImportGUIDMuss Interface Member Funktionen in der exakten COM interface Reihenfolge enthaltenGgf. Standard Marshalling mit MarshalAs überschreibenException Mapping zwischen COM & .net festlegen
CoClasses & Interfaces in .net verwendenCoClass instanziierenEntsprechendes Interface casten
MarshallingStandardmarshalling konvertiert Datentypen von COM in .net & viceversaAnpassung von Marshalling ist ggf. notwendigVerwenden von MarshalAs um Marshalling anzupassen
Unmanaged EventsCOM Events werden wie C# Events behandeltEvents nach COM auslösen von C# aus
Customize WrappersRCW ErstellenRCW DisassemblierenSource anpassenRCW Neu kompilieren

3 Interop Part2

  • 1.
    Interoperation, Teil 2C#Workshop TU DarmstadtQiong Wu – Microsoft Student Partner
  • 2.
    CCW in C++verwenden
  • 3.
    Tlbimp vs. ManuellerImportTlbimp generiert einen COM to .net WrapperCOM CoClasseswerdenzu C# KlassenmitparameterlosemKonstruktorkonvertiertCOM structswerdenzu C# structsmit public fields konvertiertTlbimp kann nicht verwendet werden wennKeine Typelib vorhanden istTlbimp Definitionen nicht verarbeiten kannAlternativer AnsatzManueller Import
  • 4.
    Manueller Import -AttributeComImport – MarkierteineKlasseals extern implementierte COM Klasse.Guid – Setzt den universally unique identifier (UUID) füreineKlasseoderein InterfaceInterfaceType – Legt fest ob ein Interface von IDispatchoderIUnknownerbtPreserveSig – Legt fest ob einnativerRückgabewert von einem HRESULT zueiner.net Exception umgewandeltwerdensoll
  • 5.
    Manueller Import –COM CoClassCoClass als Klasse deklarierenDarf von keineranderenKlasseerbenDarfkeine Interfaces implementierenGUID AttributsetzenInstanziieren mit new SchlüsselwortC# Äquivalent zu CoCreateInstanceParameterloser Konstruktor
  • 6.
    Manueller Import –COM InterfaceC# Interface erstellen mit AttributenCOMImportGUIDMuss Interface Member Funktionen in der exakten COM interface Reihenfolge enthaltenGgf. Standard Marshalling mit MarshalAs überschreibenException Mapping zwischen COM & .net festlegen
  • 7.
    CoClasses & Interfacesin .net verwendenCoClass instanziierenEntsprechendes Interface casten
  • 8.
    MarshallingStandardmarshalling konvertiert Datentypenvon COM in .net & viceversaAnpassung von Marshalling ist ggf. notwendigVerwenden von MarshalAs um Marshalling anzupassen
  • 9.
    Unmanaged EventsCOM Eventswerden wie C# Events behandeltEvents nach COM auslösen von C# aus
  • 10.
    Customize WrappersRCW ErstellenRCWDisassemblierenSource anpassenRCW Neu kompilieren