Использование 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.
См. также
Задачи
Пошаговое руководство. Внедрение данных о типах из управляемых сборок (C# и Visual Basic)
Основные понятия
Предоставление клиентам .NET Framework доступа к COM-компонентам
Просмотр сборки для поиска COM-типов
Вызов методов, свойств и событий