Кросс-процессинг одиночного объекта - PullRequest
4 голосов
/ 04 ноября 2010

Это вариант другого Q моего. У меня есть два приложения, X и Y. Они должны разделить один COM-объект между ними. X будет отправлять данные этому объекту, а Y будет отвечать на события, отправленные из этого приложения. В любой момент X или Y могут быть прерваны, но синглтон должен остаться в живых, пока не прекратятся оба приложения.
Должна быть возможность создать одноэлементный COM-объект таким образом, но что, если X запускается первым и создает его, Y затем запускает и использует его, затем X останавливается и ... Что происходит с одноэлементным? Кто-нибудь пробовал это с Delphi?

1 Ответ

6 голосов
/ 05 ноября 2010

Я думаю, что вам не хватает ключевой точки COM.COM - это всего лишь шаг от общего IPC, под которым я подразумеваю, что процесс COM живет только в одном процессе (или даже в потоке, но здесь начинается история квартиры).Если вы обращаетесь к одному COM-объекту из двух процессов, один процесс фактически маршаллизирует вызовы от и к объекту в «плоские данные» и отправляет сообщения в дескриптор скрытого окна другому процессу.

Чтобы иметь возможностьделать то, что вы описываете, вам придется беспокоиться о том, что делать с объектом, когда «процесс-владелец» хочет завершить работу и должен «приостановить» объект (например, путем сериализации) и попросить один из других процессов «возобновить»объект и примите на себя ответственность и начните запускать объект.

Я бы посоветовал вам создать третий процесс, а именно: только запустить этот одноэлементный объект, который вы хотите использовать в других процессах.Таким образом, вы можете позволить обычному подсчету ссылок и активации COM выполнять свою работу, и вы будете использовать COM так, как он должен был работать.

...