Поделиться через


Обзор взаимодействия

Взаимодействие позволяет сохранять и использовать существующие инвестиции в неуправляемый код. Код, который выполняется под контролем среды CLR, является управляемым кодом, а код, который выполняется вне среды CLR, неуправляемый код. КОМПОНЕНТЫ COM, COM+, C++, компоненты ActiveX и API Microsoft Windows являются примерами неуправляемого кода.

.NET обеспечивает взаимодействие с неуправляемым кодом через службы вызова платформ, пространство имен System.Runtime.InteropServices, взаимодействие C++ и взаимодействие с COM (COM-interop).

Вызов платформенных функций

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

Дополнительные сведения см. в разделе "Использование неуправляемых функций DLL " и "Как использовать вызов платформы для воспроизведения WAV-файла".

Замечание

Среда Common Language Runtime (CLR) управляет доступом к системным ресурсам. Вызов неуправляемого кода, который находится за пределами среды CLR, обходит этот механизм безопасности и, следовательно, представляет угрозу безопасности. Например, неуправляемый код может напрямую вызывать ресурсы в неуправляемом коде, обходя механизмы безопасности CLR. Дополнительные сведения см. в разделе "Безопасность" в .NET.

Интероперабельность C++

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

Доступ к COM-компонентам в C#

Компонент COM можно использовать в проекте C#. Общий порядок действий.

  1. Найдите com-компонент для использования и зарегистрируйте его. Используйте regsvr32.exe для регистрации или отмены регистрации библиотеки DLL COM.
  2. Добавьте в проект ссылку на com-компонент или библиотеку типов. При добавлении ссылки Visual Studio использует Tlbimp.exe (Импортёр библиотеки типов), который принимает библиотеку типов в качестве входных данных и создаёт сборку взаимодействия .NET. Сборка, также называемая вызываемой оболочкой среды выполнения (RCW), содержит управляемые классы и интерфейсы, которые оборачиваются вокруг классов и интерфейсов COM, находящихся в библиотеке типов. Visual Studio добавляет в проект ссылку на созданную сборку.
  3. Создайте экземпляр класса, определенного в RCW. Создание экземпляра этого класса создает экземпляр COM-объекта.
  4. Используйте объект так же, как и другие управляемые объекты. Когда объект удаляется сборщиком мусора, экземпляр COM-объекта также освобождается в памяти.

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

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

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

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

Для получения дополнительной информации см. предоставление компонентов .NET Framework COM и пример COM-класса.

См. также