Общие сведения о взаимодействии. (Руководство по программированию в C#)

В разделе описываются методы для разрешения взаимодействия между управляемым кодом C# и неуправляемым кодом.

Вызов неуправляемого кода

Вызов неуправляемого кода — это служба, которая позволяет управляемому программному коду вызывать неуправляемые функции, реализуемые в библиотеках динамической компоновки (DLL), например, функции библиотек Microsoft Win32 API. Вызов неуправляемого кода обнаруживает и вызывает экспортируемую функцию и при необходимости выполняет маршалинг ее аргументов (целых чисел, строк, массивов, структур и так далее) через границы взаимодействия.

Дополнительные сведения см. в разделах Использование неуправляемых функций DLL и Практическое руководство. Использование вызова неуправляемого кода для воспроизведения звукового файла (Руководство по программированию на C#).

Примечание

За управление доступом к ресурсам системы отвечает среда CLR (среда CLR).При вызове неуправляемого кода вне среды CLR этот механизм защиты не задействуется, в связи с чем возникает угроза безопасности.Например, неуправляемый код может напрямую обращаться к ресурсам неуправляемого кода, не используя механизмы обеспечения безопасности среды CLR.Дополнительные сведения см. в разделе Безопасность .NET Framework.

Взаимодействие C++

Можно использовать взаимодействие C++, также известное как механизм "It Just Works" (IJW), чтобы создать программу-оболочку для собственного класса C++, чтобы он мог использоваться в коде, созданном в C# или на другом языке .NET Framework. Чтобы это сделать, необходимо написать код C++, чтобы создать программу-оболочку для собственного компонента DLL или COM. В отличие от других языков .NET Framework, Visual C++ поддерживает функцию взаимодействия, которая позволяет управляемому и неуправляемому коду находиться в одном приложении и даже в одном файле. Затем выполняется построение кода C++ с помощью переключателя компилятора /clr, чтобы получить управляемую сборку. Наконец, добавляется ссылка на сборку в проекте С# и используются объекты с оболочкой, так же как при использовании других управляемых классов.

Дополнительные сведения см. в разделах Практическое руководство. Создание программы-оболочки для неуправляемого класса для использования в языке C# и Использование взаимодействия языка C++ (неявный PInvoke).

Предоставление компонентов COM для C#

Компонент COM можно получить из проекта C#. Для этого необходимо выполнить следующие шаги:

  1. Найдите компонент COM для использования и зарегистрируйте его. Используйте файл regsvr32.exe для регистрации или отмены регистрации COM DLL.

  2. Добавьте к проекту ссылку на компонент COM или библиотеку типов.

    При добавлении ссылки Visual Studio использует Tlbimp.exe (программа экспорта библиотек типов), принимающее библиотеку типов в качетстве входных данных, для вывода сборки взаимодействия .NET Framework. Сборка, также называемая "вызываемая оболочка времени выполнения" (RCW) содержит управляемые классы и интерфейсы, которые являются оболочкой для COM-классов и интерфейсов, находящихся в библиотеке типов. Visual Studio добавляет к проекту ссылку на созданную сборку.

  3. Создайте экземпляр класса, определенного в вызываемой оболочке времени выполнения. Это, в свою очередь, приведет к созданию экземпляра объекта COM.

  4. Используйте объект так же, как используются другие управляемые объекты. Когда объект удаляется сборкой мусора, экземпляр объекта COM также удаляется из памяти.

Дополнительные сведения см. в разделе Предоставление клиентам .NET Framework доступа к COM-компонентам.

Предоставление C# для COM

Клиенты COM могут получить типы C#, которые были предоставлены должным образом. Основные шаги для предоставления типов C# следующие:

  1. Добавьте в проект C# атрибуты взаимодействия.

    Сборку COM можно сделать видимой, изменив свойства проекта Visual C#. Дополнительные сведения см. в разделе Диалоговое окно "Сведения о сборке".

  2. Создайте библиотеку типов COM и зарегистрируйте ее для использования COM.

    Можно изменить свойства проекта Visual C#, чтобы автоматически зарегистрировать сборку C# для COM-взаимодействия. Visual Studio использует Regasm.exe (средство регистрации сборок), используя параметр командной строки /tlb, который принимает управляемую сборку в качестве входных данных, для создания библиотеки типов. Эта библиотека типов описывает типы public в сборке и добавляет в реестр параметры, чтобы клиенты COM могли создавать управляемые классы. Дополнительные сведения см. в разделе Практическое руководство. Регистрация компонента для COM-взаимодействия.

Дополнительные сведения см. в разделах Предоставление COM-клиентам доступа к компонентам .NET Framework и Пример COM-класса (Руководство по программированию на C#).

См. также

Основные понятия

Руководство по программированию на C#

Другие ресурсы

Improving Interop Performance

Введение во взаимодействие с COM

Маршалинг данных между управляемым и неуправляемым кодом

Взаимодействие с неуправляемым кодом

Расширенное COM-взаимодействие

Interoperability in the .NET Compact Framework