Überblick über die Interoperabilität (C#-Programmierhandbuch)
In diesem Thema sind Methoden beschrieben, mit denen die Interoperabilität zwischen verwaltetem C#-Code und nicht verwalteten Code ermöglicht wird.
Plattformaufruf
Der Plattformaufruf ist ein Dienst, mit dem nicht verwaltete Funktionen, die in DLLs (Dynamic Link Libraries) implementiert sind (z. B. in der Microsoft Win32-API), von verwaltetem Code aufgerufen werden können.Durch diesen Dienst wird eine exportierte Funktion gesucht und aufgerufen, und die dazugehörigen Argumente (ganze Zahlen, Zeichenfolgen, Arrays, Strukturen usw.) werden gegebenenfalls über die Grenzen der Interoperation hinaus gemarshallt.
Weitere Informationen finden Sie unter Verwenden nicht verwalteter DLL-Funktionen und Gewusst wie: Verwenden eines Plattformaufrufs zum Wiedergeben einer Wavedatei (C#-Programmierhandbuch).
Hinweis |
---|
Die Common Language Runtime (CLR) (CLR) verwaltet den Zugriff auf Systemressourcen.Durch das Aufrufen von nicht verwaltetem Code außerhalb der CLR wird dieser Sicherheitsmechanismus umgangen, deshalb stellt diese Vorgehensweise ein Sicherheitsrisiko dar.Beispielsweise können Ressourcen in nicht verwaltetem Code direkt von nicht verwaltetem Code aufgerufen werden, indem der CLR-Sicherheitsmechanismus umgegangen wird.Informationen finden Sie unter .NET Framework Security. |
C++ Interop
Sie können C++-Interop, auch als IJW (It Just Works) bezeichnet, zum Umschließen einer systemeigenen C++-Klasse verwenden, sodass diese von Code verarbeitet werden kann, der in C# oder einer anderen .NET Framework-Programmiersprache erstellt wurde.Dazu schreiben Sie C++-Code, um eine systemeigene DLL oder COM-Komponente zu umschließen.Im Gegensatz zu anderen .NET Framework-Programmiersprachen verfügt Visual C++ über Interoperabilitätsunterstützung, mit der verwalteter und nicht verwalteter Code in derselben Anwendung und sogar in derselben Datei vorhanden sein können.Dann erstellen Sie den C++-Code mit dem /clr-Compilerschalter, um eine verwaltete Assembly zu erzeugen.Letztlich fügen Sie der Assembly im C#-Projekt einen Verweis hinzu und verwenden die umschlossenen Objekte wie jede andere verwaltete Klasse.
Verfügbarmachen von COM-Komponenten für C#
Sie können eine COM-Komponente aus einem C#-Projekt verwenden.Dazu müssen Sie die folgenden allgemeinen Schritte ausführen:
Suchen Sie eine COM-Komponente, die Sie verwenden möchten, und registrieren Sie diese.Verwenden Sie regsvr32.exe, um eine COM-DLL zu registrieren oder die Registrierung aufzuheben.
Fügen Sie dem Projekt einen Verweis auf die COM-Komponente oder Typbibliothek hinzu.
Wenn Sie den Verweis hinzufügen, gibt Visual Studio eine .NET Framework-Interop-Assembly mit dem Tlbimp.exe (Type Library Importer-Tool) aus, der eine Typbibliothek als Eingabe akzeptiert.Die Assembly, auch als RCW (Runtime Callable Wrapper) 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.
Erstellen Sie eine Instanz einer im RCW definierten Klasse.Diese wiederum erstellt eine Instanz des COM-Objekts.
Verwenden Sie das Objekt genau wie jedes andere verwaltete Objekt.Wenn das Objekt von der Garbage Collection zurückgefordert wird, wird die Instanz des COM-Objekts vom Speicher ebenfalls freigegeben.
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 verwenden, die ordnungsgemäß verfügbar gemacht wurden.Mit den folgenden Grundschritten machen Sie C#-Typen verfügbar:
Fügen Sie im C#-Projekt Interop-Attribute hinzu.
Sie können ein Assembly-COM sichtbar machen, indem Sie Visual C#-Projekteigenschaften ändern.Weitere Informationen finden Sie unter Dialogfeld "Assemblyinformationen".
Generieren Sie eine COM-Typbibliothek, und registrieren Sie diese für die Verwendung durch COM.
Sie können Visual C#-Projekteigenschaften ändern, um die C#-Assembly für COM-Interop automatisch zu registrieren.Visual Studio verwendet das Regasm.exe (Assembly Registration-Tool) mit dem /tlb-Befehlszeilenschalter, der eine verwaltete Assembly als Eingabe erfordert, um eine Typbibliothek zu generieren.Diese Typbibliothek beschreibt die public-Typen in der Assembly und fügt Registrierungseinträge hinzu, sodass COM-Clients verwaltete Klassen erstellen können.
Weitere Informationen finden Sie unter Verfügbarmachen von .NET Framework-Komponenten in COM und COM-Beispielklasse (C#-Programmierhandbuch).
Siehe auch
Konzepte
Weitere Ressourcen
Marshaling between Managed and Unmanaged Code