Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
При использовании стандартного маршалинга COM обрабатывает все сведения, описанные здесь. Однако есть те немногие программисты, которые нуждаются в этих деталях и для тех, кто заинтересован в базовой информации. Маршалинг — это процесс упаковки и распаковки параметров, чтобы удаленный вызов процедуры мог произойти.
Различные типы параметров маршалируются различными способами. Например, маршалинг целочисленного параметра подразумевает простое копирование значения в буфер сообщений. (Хотя даже в этом простом случае существуют такие проблемы, как порядок байтов для решения межкомпьютерных вызовов.) Однако маршалинг массива является более сложным процессом. Элементы массива копируются в определенном порядке, чтобы другая сторона точно может восстановить массив. При маршалинге указателя данные, на которые указывает указатель, копируются по правилам и соглашениям работы с вложенными указателями в структурах. Существуют уникальные функции для управления маршалингом каждого типа параметра.
При стандартном маршалинге прокси-серверы и заглушки — это системные ресурсы для интерфейса, и они взаимодействуют с каналом через стандартный протокол. Стандартную маршализацию можно использовать как стандартными COM-определяемыми интерфейсами, так и пользовательскими интерфейсами.
- В случае большинства COM-интерфейсов прокси-серверы и заглушки для стандартного маршалинга являются внутрипроцессными объектами компонентов, загруженными из системной библиотеки DLL, предоставляемой COM в Ole32.dll.
- В случае пользовательских интерфейсов прокси-серверы и заглушки для стандартного маршалинга создаются конструктором интерфейсов, как правило, с ПОМОЩЬЮ MIDL. Эти прокси и заглушки статически настроены в реестре, поэтому любой клиент может использовать пользовательский интерфейс через межпроцессные границы. Эти прокси-серверы и заглушки загружаются из библиотеки DLL, расположенной через системный реестр, используя идентификатор интерфейса (IID) для пользовательского интерфейса, который они маршалируют.
- Альтернативой использованию MIDL для создания прокси-серверов и заглушек для пользовательских интерфейсов может служить создание библиотеки типов. Интерфейс будет маршализоваться с помощью маршализующего механизма, основанного на библиотеке типов, предоставляемого системой.
В качестве альтернативы стандартному маршалингу интерфейс (стандартный или настраиваемый) может использовать пользовательский маршалинг. При использовании пользовательского маршалинга объект динамически реализует прокси в процессе выполнения для каждого интерфейса, который он поддерживает. Для любого заданного интерфейса объект может выбрать стандартный маршалинг COM или пользовательский маршалинг. Этот выбор делается объектом отдельно для каждого интерфейса. После выбора для данного интерфейса он остается в силе во время существования объекта. Однако один интерфейс в объекте может использовать пользовательский маршалинг, а другой — стандартный маршалинг.
Настраиваемая сериализация уникальна для объекта, который её реализует. Он использует прокси-серверы, реализованные объектом, и предоставляется системе по запросу во время выполнения. Объекты, реализующие пользовательский маршалинг, должны реализовать интерфейс IMarshal, в то время как объекты, поддерживающие стандартный маршалинг, не обязаны этого делать.
Если вы решите разработать пользовательский интерфейс, вы должны обеспечить поддержку маршалинга. Как правило, вы предоставите стандартную библиотеку DLL маршалинга для интерфейса, который вы разрабатываете. Вы можете создать код прокси/заглушки и библиотеку DLL прокси/заглушки или создать библиотеку типов, которую COM будет использовать для маршалинга, управляемого данными (используя данные из библиотеки типов).
Для того чтобы клиент мог вызывать метод интерфейса в объекте, находящемся в другом процессе, требуется сотрудничество нескольких компонентов. Стандартный прокси-сервер — это часть кода для конкретного интерфейса, который находится в пространстве процесса клиента и подготавливает параметры интерфейса для передачи. Он упаковывает или упорядочивает их таким образом, чтобы их можно было повторно создать и понять в процессе получения данных. Стандартная заглушка, также часть кода для конкретного интерфейса, находится в пространстве процесса сервера и изменяет работу прокси-сервера. Заглушка распаковывает или демаршализует отправленные параметры и передает их приложению объекта. Он также упаковает информацию ответа для отправки клиенту обратно.
Заметка
Читатели, знакомые с RPC больше, чем с COM, могут быть привыкшими к терминам клиентская заглушка и серверная заглушка. Эти термины аналогичны прокси и шаблону.
Компоненты межпроцессных коммуникаций
На следующей схеме показан поток обмена данными между компонентами. На стороне клиента границы процесса вызов метода клиента проходит через проксисервер, а затем на канал, который является частью COM-библиотеки. Канал отправляет буфер, содержащий маршалированные параметры, в библиотеку времени выполнения RPC, для передачи его через границу процесса. Время выполнения RPC и COM-библиотеки существуют по обе стороны процесса. Различие между каналом и временем выполнения RPC является характеристикой этой реализации и не является частью модели программирования или концептуальной модели для объектов COM-клиента или сервера. COM-серверы видят только прокси или заглушки и, косвенно, канал. Будущие реализации могут использовать различные слои ниже канала или не использовать слои.
диаграмма
Связанные разделы