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


COM-оболочки

COM отличается от объектной модели среды выполнения .NET несколькими важными способами:

  • Клиенты COM-объектов должны управлять временем существования этих объектов; среда CLR управляет временем существования объектов в своей среде.

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

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

Для преодоления этих различий среда выполнения предоставляет классы-оболочки, так чтобы управляемые и неуправляемые клиенты считали, что вызывают объекты в своей соответствующей среде. Всякий раз, когда управляемый клиент вызывает метод в COM-объекте, среда выполнения создает вызываемую оболочку среды выполнения (RCW). RCWs скрывают различия между управляемыми и неуправляемыми ссылочными механизмами, в числе других аспектов. Среда выполнения также создает вызываемую обертку COM (CCW), для обратного выполнения процесса, что позволяет COM-клиенту легко вызывать метод на объекте .NET. Как показано на следующем рисунке, перспектива вызывающего кода определяет, какой класс оболочки создает среда выполнения.

Общие сведения о оболочке COM

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

См. также