Использование COM-типов в управляемом коде

COM-типы, определенные в сборке, подобны любым другим управляемым типам. Управляемые клиенты могут обычным образом создавать новый экземпляр COM-типа и получать сведения о классе с помощью метаданных как и для любого другого управляемого класса. Синтаксис метода можно узнать с помощью средства просмотра объектов или получить с помощью отражения так же, как и для любого другого управляемого класса. Когда COM-объект при сбое возвращает значение HRESULT, клиент платформы .NET Framework перехватывает соответствующее исключение.

Есть два способа предоставить в составе приложения информацию о типах, обеспечивающую взаимодействие с COM-типами:

  • С использованием встроенных типов взаимодействия: начиная с платформы .NET Framework 4, можно указать компилятору, что в исполняемый файл следует внедрить информацию о типах из сборки взаимодействия. Компилятор встраивает информацию только о типах, используемых приложением. Развертывать сборку взаимодействия вместе с приложением не требуется. Это рекомендуемая методика.

  • Путем развертывания сборок взаимодействия: можно создать стандартную ссылку на сборку взаимодействия. В данном случае сборку взаимодействия следует развернуть вместе с приложением. Если применяется данный метод и не используется частный COM-компонент, необходимо во всех случаях ссылаться на основную сборку взаимодействия, опубликованную автором COM-компонента, который планируется интегрировать в управляемый код. Дополнительные сведения о создании и использовании основных сборок взаимодействия см. в разделе Основные сборки взаимодействия.

ПримечаниеПримечание

При использовании встраивания типов взаимодействия их можно встраивать из основной сборки взаимодействия, опубликованной автором COM-компонента.Развертывать основную сборку взаимодействия вместе с приложением при этом не требуется.

Использование встраивания типов взаимодействия сокращает размер приложения, поскольку большинство приложений используют лишь некоторые функции компонентов COM. Компилятор весьма эффективно внедряет информацию о типах: если приложение использует лишь некоторые методы интерфейса COM, то компилятор не будет встраивать неиспользуемые методы. Если приложение со внедренной информацией о типах взаимодействует с другим аналогичным приложением или приложением, использующим основную сборку взаимодействия, то среда CLR использует правила эквивалентности типов, чтобы определить, представляют ли одноименные типы один и тот же тип COM.

Получение и освобождение ссылки на работающий COM-объект выполняется точно так же, как получение и освобождение ссылки на любой другой работающий управляемый объект. Когда клиенты платформы .NET Framework получают и освобождают ссылку на COM-объект, среда выполнения хранит количество ссылок на COM-объект так же, как и любой другой COM-клиент. При этом поведение клиентов .NET Framework может совпадать с поведением при работе с любым другим управляемым серверным объектом, как если бы объект подлежал сборке мусора.

Visual Studio упрощает внедрение информации о типах в приложения и надстройки. Примеры см. в разделах Пошаговое руководство. Внедрение данных о типе из сборок для приложений Microsoft Office (C# и Visual Basic) и Пошаговое руководство. Внедрение данных о типах из управляемых сборок (C# и Visual Basic).

Примеры программного кода для тем этого раздела см. в разделе Пример COM- взаимодействия. Клиент .NET и сервер COM.

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

См. также

Задачи

Пошаговое руководство. Внедрение данных о типе из сборок для приложений Microsoft Office (C# и Visual Basic)

Пошаговое руководство. Внедрение данных о типах из управляемых сборок (C# и Visual Basic)

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

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

Просмотр сборки для поиска COM-типов

Активация COM-объекта

Вызов методов, свойств и событий

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

Оболочки COM