Przegląd współdziałania (Przewodnik programowania w języku C#)Interoperability Overview (C# Programming Guide)

W temacie opisano metody umożliwiające włączenie współdziałania kodu C# zarządzanego i kodu niezarządzanego.The topic describes methods to enable interoperability between C# managed code and unmanaged code.

Wywołanie platformyPlatform Invoke

Wywołanie platformy to usługa, która umożliwia kodowi zarządzanemu wywoływanie funkcji niezarządzanych, które są zaimplementowane w bibliotekach dołączanych dynamicznie (dll), takich jak te w interfejsie API systemu Microsoft Windows.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 Windows API. Lokalizuje i wywołuje wyeksportowaną funkcję i kierującie jej argumentów (liczbami całkowitymi, ciągami, tablicami, strukturami itd.) w granicach międzyoperacyjnych, zgodnie z wymaganiami.It locates and invokes an exported function and marshals its arguments (integers, strings, arrays, structures, and so on) across the interoperation boundary as needed.

Aby uzyskać więcej informacji, zobacz Korzystanie z niezarządzanych funkcji DLL i instrukcje: Użyj wywołania platformy, aby odtworzyć plikWave.For more information, see Consuming Unmanaged DLL Functions and How to: Use Platform Invoke to Play a Wave File.

Uwaga

Środowisko uruchomieniowe języka wspólnego (CLR) zarządza dostępem do zasobów systemowych.The Common Language Runtime (CLR) manages access to system resources. Wywoływanie niezarządzanego kodu, który znajduje się poza środowiskiem CLR, pomija ten mechanizm zabezpieczeń i w związku z tym stanowi zagrożenie bezpieczeństwa.Calling unmanaged code that is outside the CLR bypasses this security mechanism, and therefore presents a security risk. Na przykład kod niezarządzany może wywoływać zasoby bezpośrednio w kodzie niezarządzanym, pomijając mechanizmy zabezpieczeń środowiska CLR.For example, unmanaged code might call resources in unmanaged code directly, bypassing CLR security mechanisms. Aby uzyskać więcej informacji, zobacz zabezpieczenia w programie .NET.For more information, see Security in .NET.

międzyoperacyjność C++C++ Interop

Można użyć C++ międzyoperacyjności, znanego również jako tylko działa (IJW), aby otoczyć klasę C++ natywną, tak aby mogła być używana przez kod, który został C# utworzony w lub innym języku .NET Framework.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. W tym celu napiszesz C++ kod w celu zawinięcia NATYWNEJ biblioteki DLL lub składnika com.To do this, you write C++ code to wrap a native DLL or COM component. W przeciwieństwie do innych języków .NET Framework C++ Wizualizacja zapewnia obsługę współdziałania, która umożliwia zlokalizowany kod zarządzany i niezarządzany w tej samej aplikacji, a nawet w tym samym pliku.Unlike other .NET Framework languages, Visual C++ has interoperability support that enables managed and unmanaged code to be located in the same application and even in the same file. Następnie można skompilować C++ kod przy użyciu przełącznika kompilatora /CLR w celu utworzenia zestawu zarządzanego.You then build the C++ code by using the /clr compiler switch to produce a managed assembly. Na koniec Dodaj odwołanie do zestawu w C# projekcie i użyj opakowanych obiektów tak samo jak w przypadku innych zarządzanych klas.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.

Udostępnianie składników COM w języku C#Exposing COM Components to C#

Można wykorzystać składnik COM z C# projektu.You can consume a COM component from a C# project. Ogólne czynności są następujące:The general steps are as follows:

  1. Znajdź składnik COM, który ma być używany, i zarejestruj go.Locate a COM component to use and register it. Użyj programu Regsvr32. exe do zarejestrowania lub wyrejestrowania biblioteki DLL COM.Use regsvr32.exe to register or un–register a COM DLL.

  2. Dodaj do projektu odwołanie do składnika modelu COM lub biblioteki typów.Add to the project a reference to the COM component or type library.

    Po dodaniu odwołania program Visual Studio używa programu Tlbimp. exe (Importer biblioteki typów), który przyjmuje bibliotekę typów jako dane wejściowe, aby wyprowadzić zestaw międzyoperacyjny .NET Framework.When you add the reference, Visual Studio uses the Tlbimp.exe (Type Library Importer), which takes a type library as input, to output a .NET Framework interop assembly. Zestaw, nazywany również otoką (otoka czasowa środowiska uruchomieniowego), zawiera zarządzane klasy i interfejsy, które zawijają klasy COM i interfejsy, które znajdują się w bibliotece typów.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. Program Visual Studio dodaje do projektu odwołanie do wygenerowanego zestawu.Visual Studio adds to the project a reference to the generated assembly.

  3. Utwórz wystąpienie klasy, która jest zdefiniowana w OTOKi.Create an instance of a class that is defined in the RCW. To z kolei tworzy wystąpienie obiektu COM.This, in turn, creates an instance of the COM object.

  4. Użyj obiektu tak samo jak w przypadku używania innych obiektów zarządzanych.Use the object just as you use other managed objects. Gdy obiekt jest odzyskiwany przez wyrzucanie elementów bezużytecznych, wystąpienie obiektu COM jest również zwalniane z pamięci.When the object is reclaimed by garbage collection, the instance of the COM object is also released from memory.

Aby uzyskać więcej informacji, zobacz Udostępnianie składników com do .NET Framework.For more information, see Exposing COM Components to the .NET Framework.

Uwidacznianie C# do modelu comExposing C# to COM

Klienci modelu COM mogą C# korzystać z typów, które zostały prawidłowo uwidocznione.COM clients can consume C# types that have been correctly exposed. Podstawowe kroki w celu udostępnienia C# typów są następujące:The basic steps to expose C# types are as follows:

  1. Dodaj atrybuty międzyoperacyjności C# do projektu.Add interop attributes in the C# project.

    Można sprawić, aby zestaw COM był widoczny przez modyfikację właściwości projektu wizualnego C# .You can make an assembly COM visible by modifying Visual C# project properties. Aby uzyskać więcej informacji, zobacz okno dialogowe informacje o zestawie.For more information, see Assembly Information Dialog Box.

  2. Wygeneruj bibliotekę typów modelu COM i zarejestruj ją pod kątem użycia COM.Generate a COM type library and register it for COM usage.

    Możesz zmodyfikować właściwości projektu C# wizualnego, aby automatycznie zarejestrować C# zestaw na potrzeby współdziałania z modelem com.You can modify Visual C# project properties to automatically register the C# assembly for COM interop. Program Visual Studio używa programu Regasm. exe (Narzędzie rejestracji zestawów)przy użyciu /tlb przełącznika wiersza polecenia, który pobiera zarządzany zestaw jako dane wejściowe, aby wygenerować bibliotekę typów.Visual Studio 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. Ta biblioteka typów opisuje public typy w zestawie i dodaje wpisy rejestru, aby klienci modelu COM mogli tworzyć klasy zarządzane.This type library describes the public types in the assembly and adds registry entries so that COM clients can create managed classes.

Aby uzyskać więcej informacji, zobacz Udostępnianie składników .NET Framework do modelu COM i przykładowej klasy com.For more information, see Exposing .NET Framework Components to COM and Example COM Class.

Zobacz takżeSee also