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


Вызываемая оболочка COM

Обновлен: Ноябрь 2007

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

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

Доступ к объектам .NET с помощью вызываемой оболочки COM
вызываемая оболочка COM

Вызываемые оболочки COM невидимы для других классов, работающих в среде .NET Framework. Их основной целью является маршалинг вызовов между управляемым и неуправляемым кодом. Однако вызываемые оболочки COM также управляют идентификацией и временем жизни управляемых объектов, которые в них упакованы.

Идентификация объектов

Среда выполнения выделяет память для объекта .NET из кучи, освобождаемой сборщиком мусора, что позволяет среде выполнения при необходимости перемещать объект в памяти. Напротив для вызываемой оболочки COM среда выполнения выделяет память из кучи, не обрабатываемой сборщиком мусора, что позволяет COM-клиенты непосредственно работать с оболочкой.

Время существования объекта

В отличие от клиента .NET учет ссылок для вызываемой оболочки COM, в которую инкапсулирован клиент, ведется обычным для модели COM образом. Когда счетчик ссылок на вызываемую оболочку COM достигает нуля, оболочка освобождает свою ссылку на управляемый объект. Управляемый объект, ссылок на который больше не осталось, уничтожается сборщиком мусора в течение ближайшего цикла.

См. также

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

Оболочки COM

Имитация COM-интерфейсов

Вызываемая оболочка времени выполнения

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

Ссылки

Вызываемая оболочка COM