Это вариант на another Q моих. У меня есть два приложения: X и Y. Они должны совместно использовать один COM-объект между ними. X будет отправлять данные на этот объект, а Y будет отвечать на события, отправленные из этого приложения. В любой момент X или Y могут быть прекращены, но синглтон должен остаться в живых, пока оба приложения не будут прекращены.
Должно быть возможным создание однопоточного COM-объекта таким образом, но что, если X начинает сначала и создает его, тогда Y запускается и использует его, затем X останавливается и ... Что происходит с singleton?
В любом случае, кто-нибудь когда-либо пробовал это с Delphi?Перекрестный процесс Singleton object
ответ
Я думаю, что вам не хватает основной точки COM. COM - это всего лишь шаг от общего IPC, под которым я имею в виду, что COM-процесс живет только в одном процессе (или даже в потоке, но это то, где входит история квартиры). Если вы получаете доступ к одному COM-объекту из двух процессов, один процесс на самом деле сортирует вызовы от и до объекта в «плоские данные» и отправляет сообщения в скрытый дескриптор окна другому процессу.
Чтобы иметь возможность делать то, что вы описали, вам придется беспокоиться о том, что делать с объектом, когда «процесс владения» хочет закрыть, и должен «приостановить» объект (например, путем сериализации) и задать один других процессов для «возобновления» объекта и принятия права собственности и начала запуска объекта.
Я предлагаю вам создать третий процесс, а именно только запустите этот одноэлементный объект, который вы хотите использовать в других процессах. Таким образом, вы можете позволить нормальный подсчет ссылок и активация COM выполняют свою работу, и вы будете использовать COM так, как предполагалось, чтобы работать.
Очень хорошее предложение! :-) –
Спасибо, есть больше, где это произошло: http://yoy.be/item.asp?i282 –