Überblick über die Interoperabilität (C#-Programmierhandbuch)Interoperability Overview (C# Programming Guide)

Dieses Thema beschreibt Methoden zur Gewährleistung der Interoperabilität zwischen von C#-verwaltetem und nicht verwaltetem Code.The topic describes methods to enable interoperability between C# managed code and unmanaged code.

PlattformaufrufPlatform Invoke

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.Platform invoke is a service that enables managed code to call unmanaged functions that are implemented in dynamic link libraries (DLLs), such as those in the Microsoft Win32 API. 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.It locates and invokes an exported function and marshals its arguments (integers, strings, arrays, structures, and so on) across the interoperation boundary as needed.

Weitere Informationen finden Sie unter Verwenden nicht verwalteter DLL-Funktionen und Vorgehensweise: Verwenden eines Plattformaufrufs zum Wiedergeben einer Wavedatei.For more information, see Consuming Unmanaged DLL Functions and How to: Use Platform Invoke to Play a Wave File.

Hinweis

Die Common Language Runtime (CLR) verwaltet den Zugriff auf Systemressourcen.The Common Language Runtime (CLR) manages access to system resources. Das Aufrufen von nicht verwaltetem Code, der sich außerhalb der CLR befindet, umgeht diesen Sicherheitsmechanismus; deshalb stellt er ein Sicherheitsrisiko dar.Calling unmanaged code that is outside the CLR bypasses this security mechanism, and therefore presents a security risk. Nicht verwalteter Code kann z.B. Ressourcen in nicht verwaltetem Code direkt aufrufen und umgeht damit die Sicherheitsmechanismen der CLR.For example, unmanaged code might call resources in unmanaged code directly, bypassing CLR security mechanisms. Weitere Informationen finden Sie unter .NET Framework-Sicherheit.For more information, see .NET Framework Security.

C++ InteropC++ 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.You can use C++ interop, also known as It Just Works (IJW), to wrap a native C++ class so that it can be consumed by code that is authored in C# or another .NET Framework language. Dafür schreiben Sie C++-Code, der eine native DLL- oder COM-Komponente umschließen kann.To do this, you write C++ code to wrap a native DLL or COM component. Im Gegensatz zu anderen .NET-Programmiersprachen verfügt Visual C++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.Unlike other .NET Framework languages, Visual C++Visual C++ has interoperability support that enables managed and unmanaged code to be located in the same application and even in the same file. Anschließend erstellen Sie den C++-Code mithilfe des /clr-Compilerschalters, um eine verwaltete Assembly zu erzeugen.You then build the C++ code by using the /clr compiler switch to produce a managed assembly. Zuletzt fügen Sie der Assembly in Ihrem C#-Projekt einen Verweis hinzu und verwenden das umschlossene Objekt genauso wie eine andere verwaltete Klasse.Finally, you add a reference to the assembly in your C# project and use the wrapped objects just as you would use other managed classes.

Verfügbarmachen von COM-Komponenten in C#Exposing COM Components to C#

Sie können eine COM-Komponente aus einem C#-Projekt nutzen.You can consume a COM component from a C# project. Dies sind die Hauptschritte:The general steps are as follows:

  1. Suchen Sie eine COM-Komponenten, die Sie verwenden möchten, und registrieren Sie diese.Locate a COM component to use and register it. Verwenden Sie „regsvr32.exe“ zur Registrierung und Aufhebung der Registrierung einer COM-DLL.Use regsvr32.exe to register or un–register a COM DLL.

  2. Fügen Sie dem Projekt einen Verweis auf eine COM-Komponente oder eine Typbibliothek hinzu.Add to the project a reference to the COM component or type library.

    Beim Hinzufügen des Verweises verwendet Visual StudioVisual Studio das Tlbimp.exe (Type Library Importer-Tool), das eine Typbibliothek als Eingabe akzeptiert, um eine .NET Framework-Interopassembly auszugeben.When you add the reference, Visual StudioVisual Studio uses the Tlbimp.exe (Type Library Importer), which takes a type library as input, to output a .NET Framework interop assembly. 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.The assembly, also named a runtime callable wrapper (RCW), contains managed classes and interfaces that wrap the COM classes and interfaces that are in the type library. Visual StudioVisual Studio fügt dem Projekt einen Verweis auf die generierte Assembly hinzu. adds to the project a reference to the generated assembly.

  3. Erstellen Sie eine Instanz einer im RCW definierten Klasse.Create an instance of a class that is defined in the RCW. Dadurch wird wiederum eine Instanz des COM-Objekts erstellt.This, in turn, creates an instance of the COM object.

  4. Verwenden Sie das Objekt genauso, wie Sie andere verwaltete Objekte verwenden.Use the object just as you use other managed objects. Wenn das Objekt von der automatische Speicherbereinigung freigegeben wird, wird auch die Instanz des COM-Objekts aus dem Speicher freigestellt.When the object is reclaimed by garbage collection, the instance of the COM object is also released from memory.

Weitere Informationen finden Sie unter Verfügbarmachen von COM-Komponenten für .NET Framework.For more information, see Exposing COM Components to the .NET Framework.

Verfügbarmachen von C# für COMExposing C# to COM

COM-Clients können C#-Typen nutzen, die ordnungsgemäß verfügbar gemacht wurden.COM clients can consume C# types that have been correctly exposed. Dies sind die grundlegenden Schritte für das Verfügbarmachen von C#-Typen:The basic steps to expose C# types are as follows:

  1. Fügen Sie Ihrem C#-Projekt Interop-Attribute hinzu.Add interop attributes in the C# project.

    Durch das Modifizieren der Visual C#Visual C#-Projekteinstellungen können Sie eine Assembly COM-sichtbar machen.You can make an assembly COM visible by modifying Visual C#Visual C# project properties. Weitere Informationen finden Sie unter Dialogfeld „Assemblyinformationen“.For more information, see Assembly Information Dialog Box.

  2. Generieren Sie eine COM-Typbibliothek, und registrieren Sie diese für den Gebrauch mit COM.Generate a COM type library and register it for COM usage.

    Sie können die Visual C#Visual C#-Projekteinstellungen so modifizieren, dass die C#-Assembly automatisch für COM-Interop registriert wird.You can modify Visual C#Visual C# project properties to automatically register the C# assembly for COM interop. Visual StudioVisual Studio verwendet das Regasm.exe (Assembly Registration-Tool) mithilfe des Befehlszeilenschalters /tlb, das die verwaltete Assembly als Eingabe akzeptiert, um eine Typbibliothek zu generieren. uses the Regasm.exe (Assembly Registration Tool), using the /tlb command-line switch, which takes a managed assembly as input, to generate a type library. 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.This type library describes the public types in the assembly and adds registry entries so that COM clients can create managed classes.

Weitere Informationen finden Sie unter Verfügbarmachen von .NET Framework-Komponenten in COM und COM-Beispielklasse.For more information, see Exposing .NET Framework Components to COM and Example COM Class.

Siehe auchSee Also

Verbessern der Interop-LeistungImproving Interop Performance
Einführung in COM-InteropIntroduction to COM Interop
Datenmarshalling zwischen verwaltetem und nicht verwaltetem CodeMarshaling between Managed and Unmanaged Code
Interoperabilität mit nicht verwaltetem CodeInteroperating with Unmanaged Code
Erweiterte COM-InteroperabilitätAdvanced COM Interoperability
C#-ProgrammierhandbuchC# Programming Guide