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


Пользовательский маршалинг

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

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

Предположим, например, что разрабатывается управляемый интерфейс с именем INew. Если этот интерфейс предоставляется модели COM через стандартную вызываемую оболочку COM, то он будет иметь те же методы, что и управляемый интерфейс, и использовать правила маршалинга, встроенные в маршалер взаимодействия. Теперь предположим, что известный интерфейс модели COM с именем IOld уже предоставляет те же функциональные возможности, что и интерфейс INew. С помощью пользовательского маршалера можно предоставить неуправляемую реализацию интерфейса IOld, которая будет просто делегировать вызовы управляемой реализации интерфейса INew. Настраиваемый упаковщик по существу связывает управляемый и неуправляемый интерфейсы.

Обратите внимание, что пользовательские маршалеры не вызываются при вызовах от управляемой стороны к неуправляемой стороне в интерфейсах диспетчеризации.

Связанные разделы

Заголовок

Описание

Определение типа маршалинга

Описывает способ подготовки интерфейсов, необходимых для настройки настраиваемого упаковщика.

Реализация интерфейса ICustomMarshaler

Описывает варианты подготовки настраиваемого упаковщика.

Использование замещающего упаковщика

Определяет способ использования атрибута MarshalAsAttribute для вставки настраиваемого упаковщика.

Маршалинг взаимодействия

Описывает маршалинг для COM-взаимодействия и вызовов неуправляемого кода.

Ссылки

System.Runtime.InteropServices.ICustomMarshaler

System.Runtime.InteropServices.MarshalAsAttribute