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