Überblick über die Interoperabilität (C#-Programmierhandbuch)

Dieses Thema beschreibt Methoden zur Gewährleistung der Interoperabilität zwischen von C#-verwaltetem und nicht verwaltetem Code.

Plattformaufruf

Der Plattformaufruf ist ein Dienst, der es verwaltetem Code ermöglicht, nicht verwaltete Funktionen aufzurufen, die in DLLs (Dynamic Link Library) implementiert sind, z.B. die in der Microsoft Win32-API enthaltenen Funktionen. Es sucht eine exportierte Funktion, ruft diese auf und marshallt ihre Argumente (ganze Zahlen, Zeichenfolgen, Arrays, Strukturen usw.) bei Bedarf über die Grenzen des dialogfähigen Betriebs hinaus.

Weitere Informationen finden Sie unter Verwenden nicht verwalteter DLL-Funktionen und Vorgehensweise: Verwenden eines Plattformaufrufs zum Wiedergeben einer Wavedatei.

Hinweis

Die Common Language Runtime (CLR) verwaltet den Zugriff auf Systemressourcen. Das Aufrufen von nicht verwaltetem Code, der sich außerhalb der CLR befindet, umgeht diesen Sicherheitsmechanismus; deshalb stellt er ein Sicherheitsrisiko dar. Nicht verwalteter Code kann z.B. Ressourcen in nicht verwaltetem Code direkt aufrufen und umgeht damit die Sicherheitsmechanismen der CLR. Weitere Informationen finden Sie unter .NET Framework-Sicherheit.

C++ Interop

Sie können C++ Interop – auch als It Just Works (IJW) bezeichnet – verwenden, um ein native C++-Klasse zu umschließen, sodass diese von in C# oder in einer anderen .NET Framework-Programmiersprache geschriebenem Code genutzt werden kann. Dafür schreiben Sie C++-Code, der eine native DLL- oder COM-Komponente umschließen kann. Im Gegensatz zu anderen .NET-Programmiersprachen verfügt Visual C++ über eine Interoperabilitätsunterstützung, dank der verwalteter und nicht verwalteter Code in derselben Anwendung und sogar in derselben Datei verwendet werden können. Anschließend erstellen Sie den C++-Code mithilfe des /clr-Compilerschalters, um eine verwaltete Assembly zu erzeugen. Zuletzt fügen Sie der Assembly in Ihrem C#-Projekt einen Verweis hinzu und verwenden das umschlossene Objekt genauso wie eine andere verwaltete Klasse.

Verfügbarmachen von COM-Komponenten in C#

Sie können eine COM-Komponente aus einem C#-Projekt nutzen. Dies sind die Hauptschritte:

  1. Suchen Sie eine COM-Komponenten, die Sie verwenden möchten, und registrieren Sie diese. Verwenden Sie „regsvr32.exe“ zur Registrierung und Aufhebung der Registrierung einer COM-DLL.

  2. Fügen Sie dem Projekt einen Verweis auf eine COM-Komponente oder eine Typbibliothek hinzu.

    Beim Hinzufügen des Verweises verwendet Visual Studio das Tlbimp.exe (Type Library Importer-Tool), das eine Typbibliothek als Eingabe akzeptiert, um eine .NET Framework-Interopassembly auszugeben. Die Assembly – auch als Runtime Callable Wrapper (RCW) bezeichnet – enthält verwaltete Klassen und Schnittstellen, die die COM-Klassen und -Schnittstellen umschließen, die sich in der Typbibliothek befinden. Visual Studio fügt dem Projekt einen Verweis auf die generierte Assembly hinzu.

  3. Erstellen Sie eine Instanz einer im RCW definierten Klasse. Dadurch wird wiederum eine Instanz des COM-Objekts erstellt.

  4. Verwenden Sie das Objekt genauso, wie Sie andere verwaltete Objekte verwenden. Wenn das Objekt von der automatische Speicherbereinigung freigegeben wird, wird auch die Instanz des COM-Objekts aus dem Speicher freigestellt.

Weitere Informationen finden Sie unter Verfügbarmachen von COM-Komponenten für .NET Framework.

Verfügbarmachen von C# für COM

COM-Clients können C#-Typen nutzen, die ordnungsgemäß verfügbar gemacht wurden. Dies sind die grundlegenden Schritte für das Verfügbarmachen von C#-Typen:

  1. Fügen Sie Ihrem C#-Projekt Interop-Attribute hinzu.

    Durch das Modifizieren der Visual C#-Projekteinstellungen können Sie eine Assembly COM-sichtbar machen. Weitere Informationen finden Sie unter Dialogfeld „Assemblyinformationen“.

  2. Generieren Sie eine COM-Typbibliothek, und registrieren Sie diese für den Gebrauch mit COM.

    Sie können die Visual C#-Projekteinstellungen so modifizieren, dass die C#-Assembly automatisch für COM-Interop registriert wird. Visual Studio verwendet das Regasm.exe (Assembly Registration-Tool) mithilfe des Befehlszeilenschalters /tlb, das die verwaltete Assembly als Eingabe akzeptiert, um eine Typbibliothek zu generieren. Diese Typbibliothek beschreibt den Typ public in der Assembly und fügt Verzeichniseinträge hinzu, um COM-Clients das Erstellen verwalteter Klassen zu ermöglichen.

Weitere Informationen finden Sie unter Verfügbarmachen von .NET Framework-Komponenten in COM und COM-Beispielklasse.

Siehe auch

Improving Interop Performance (Optimieren der Interopleistung)
Einführung in COM-Interop
Marshalling zwischen verwaltetem und nicht verwaltetem Code
Interoperation mit nicht verwaltetem Code
Erweiterte COM-Interoperabilität
C#-Programmierhandbuch