Как я могу обратиться к COM-объекту, идентифицированному данным IUnknown * из другого процесса? - PullRequest
1 голос
/ 14 апреля 2011

Я написал два небольших приложения на C ++, одно из которых представляет собой контейнер ActiveX, в который встроен некоторый элемент управления ActiveX. Это контейнерное приложение знает IUnknown*, ссылающийся на элемент управления ActiveX.

Другое приложение - это клиент, который должен взаимодействовать с элементом управления ActiveX в предыдущем приложении. Тем не менее, я не знаю, как получить контроль над элементом управления в клиентском приложении. Простая передача значения указателя IUnknown* с сервера на клиент не будет работать с курсами из-за независимых адресных пространств.

Возможно ли как-то "продублировать" дескриптор для некоторого COM-объекта, чтобы вновь созданный дескриптор мог использоваться другими процессами? Я хотел бы, чтобы COM сделал работу RPC для меня. В противном случае мне нужно было бы делать все вызовы COM в серверном приложении и выполнять все RPC самостоятельно. : - /

1 Ответ

2 голосов
/ 14 апреля 2011

Возможно, вы захотите взглянуть на RPC в целом и на COM Прокси .

Прокси находится в адресном пространстве вызывающего процесса и действует каксуррогат для удаленного объекта.С точки зрения вызывающего объекта, прокси является объектом. Как правило, роль прокси состоит в том, чтобы упаковать параметры интерфейса для вызовов методов в его объектных интерфейсах.Прокси упаковывает параметры в буфер сообщений и передает буфер в канал, который обрабатывает транспорт между процессами.Прокси-сервер реализован в виде совокупного или составного объекта.Он содержит предоставленный системой компонент менеджера, называемый прокси-менеджером, и один или несколько специфичных для интерфейса компонентов, называемых интерфейсными прокси.Количество интерфейсных прокси равно количеству объектных интерфейсов, которые были выставлены этому конкретному клиенту. Для клиента, соблюдающего объектную модель компонента, прокси выглядит реальным объектом.

...