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