Freigeben über


Übersicht über die Interoperabilität

Mit der Interoperabilität können Sie vorhandene Investitionen in nicht verwalteten Code beibehalten und nutzen. Code, der unter der Kontrolle der Common Language Runtime (CLR) ausgeführt wird, ist verwalteter Code, und Code, der außerhalb der CLR ausgeführt wird, ist nicht verwalteter Code. COM-, COM+-, C++-Komponenten, ActiveX-Komponenten und Microsoft Windows-API sind Beispiele für nicht verwalteten Code.

.NET ermöglicht die Interoperabilität mit nicht verwalteten Code über Plattform-Aufrufdienste, namespace System.Runtime.InteropServices , C++-Interoperabilität und COM-Interoperabilität (COM-Interoperabilität).

Plattformaufruf

Plattformaufruf ist ein Dienst, der verwalteten Code ermöglicht, nicht verwaltete Funktionen aufzurufen, die in Dynamic Link Libraries (DLLs) implementiert sind, z. B. die Microsoft Windows-API. Sie sucht und ruft eine exportierte Funktion auf und marshallt ihre Argumente (ganze Zahlen, Zeichenfolgen, Arrays, Strukturen usw.) bei Bedarf über die Interoperationsgrenze.

Weitere Informationen finden Sie unter Verwenden von nicht verwalteten DLL-Funktionen und Verwenden des Plattform-Aufrufs zum Wiedergeben einer WAV-Datei.

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 und stellt daher ein Sicherheitsrisiko dar. Beispielsweise kann nicht verwalteter Code Ressourcen direkt in nicht verwalteten Code aufrufen und CLR-Sicherheitsmechanismen umgehen. Weitere Informationen finden Sie unter Sicherheit in .NET.

C++ Interop

Sie können die C++-Interoperabilität verwenden, auch als It Just Works (IJW) bezeichnet, um eine systemeigene C++-Klasse umzuschließen. Die C++-Interoperabilität ermöglicht es, dass Code, der in C# oder einer anderen .NET-Sprache erstellt wurde, darauf zugreifen kann. Sie schreiben C++-Code, um eine systemeigene DLL- oder COM-Komponente umzuschließen. Im Gegensatz zu anderen .NET-Sprachen bietet Visual C++ Interoperabilitätsunterstützung, die verwalteten und nicht verwalteten Code in derselben Anwendung und sogar in derselben Datei ermöglicht. Anschließend erstellen Sie den C++-Code mithilfe des Compilerwechsels "/clr ", um eine verwaltete Assembly zu erstellen. Schließlich fügen Sie einen Verweis auf die Assembly in Ihrem C#-Projekt hinzu und verwenden die umschlossenen Objekte genauso wie andere verwaltete Klassen.

Verfügbarmachen von COM-Komponenten für C#

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

  1. Suchen Sie eine COM-Komponente, um sie zu verwenden und zu registrieren. Verwenden Sie regsvr32.exe, um eine COM-DLL zu registrieren oder aufzuheben.
  2. Fügen Sie dem Projekt einen Verweis auf die COM-Komponente oder Typbibliothek hinzu. Wenn Sie den Verweis hinzufügen, verwendet Visual Studio die Tlbimp.exe (Type Library Importer), die eine Typbibliothek als Eingabe verwendet, um eine .NET-Interopassembly auszugeben. Die Assembly, auch als laufzeitaufrufbarer Wrapper (RCW) bezeichnet, enthält verwaltete Klassen und Schnittstellen, die die COM-Klassen und Schnittstellen in der Typbibliothek umschließen. Visual Studio fügt dem Projekt einen Verweis auf die generierte Assembly hinzu.
  3. Erstellen Sie eine Instanz einer Klasse, die im RCW definiert ist. Beim Erstellen einer Instanz dieser Klasse wird eine Instanz des COM-Objekts erstellt.
  4. Verwenden Sie das Objekt genauso wie andere verwaltete Objekte. 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. Die grundlegenden Schritte zum Verfügbarmachen von C#-Typen lauten wie folgt:

  1. Fügen Sie im C#-Projekt Interopattribute hinzu. Sie können eine COM-Assembly sichtbar machen, indem Sie C#-Projekteigenschaften ändern. Weitere Informationen finden Sie im Dialogfeld "Assemblyinformationen".
  2. Generieren Sie eine COM-Typbibliothek, und registrieren Sie sie für die COM-Verwendung. Sie können C#-Projekteigenschaften ändern, um die C#-Assembly für die COM-Interoperabilität automatisch zu registrieren. Visual Studio verwendet das Regasm.exe (Assemblyregistrierungstool) mithilfe des /tlb Befehlszeilenschalters, der eine verwaltete Assembly als Eingabe verwendet, um eine Typbibliothek zu generieren. Diese Typbibliothek beschreibt die public Typen in der Assembly und fügt Registrierungseinträge hinzu, damit COM-Clients verwaltete Klassen erstellen können.

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

Siehe auch