Шаг 77 - Что такое маршалинг ?

Разговаривая о компонентах мы разговариваем о процессах и потоках. Давайте подставим два процесса. Это процесс с потоками в нашей программе и процесс со своими потоками в объекте COM. Объект COM может быть как в процессе приложения, так и за его пределами. Так вот, если элемент находится в другом процессе, то нам нужно к нему обращаться. Просто так мы этого сделать не можем. Windows как раз и гордится тем, что ограничивает процессы для безопасности. Это правильно. Это действительно обеспечивает безопасность. Но нам нужен механизм обхода этого ограничения. Этот механизм и называется маршалинг. Маршалинг - это механизм, который позволяет клиенту в одном процессе вызывать методы объектов в другом процессе. Говорят еще, что прозрачно, что почти одно и тоже, что просто или удобно. Клиент всегда обращается к объекту. Так вот этот объект может быть разный:

Дескриптор не так понятен. Давайте вот что. Вставьте документ Excel в Word как объект, если щелкнуть по нему два раза, то запустится сервер Excel. Но и в пассивном состоянии он виден, таблица видна. И будет видна даже если на другом компьютере нет Excel только по тому, что сама OLE умеет отражать метафайл, так как ole32.dll имеет минимальные возможности по работе с документом, и отображение входит в эти возможности. Я сталкивался с такой ситуацией: внедряя рисунки Corel Draw 6 в отчеты сделанные в Word, потом через некоторое время нужно было их извлечь и не получалось, так как у нас уже стоял Corel Draw 8, хотя все они прекрасно смотрелись. Это связано с тем, что LocalServer указывал на Corel draw 6, а не 8, а InprocHandle32 все так же на ole32.dll.

Прокси, если объект находится в другом процессе, то нам нужно некоторое место куда мы можем обратиться с вызовом, в процессе создания приложения это место не известно. Мы не знаем где будет находиться вызываемая нами процедура. Незнаем ее адрес, так как не кто не гарантирует ее точно местоположение в памяти. Тогда как быть ? Вот и нашли из этого выход в виде proxy. Proxy обеспечивает межпроцессорную связь с заглушкой (Stub), именно эта заглушка и подставляется при сборке приложения.

Естественно, что данное описание упрощенное, но все-таки. Маршалинг это механизм межпроцессорного взаимодействия.


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем.