У меня есть COM-сервер вне процесса, который должен следить за вещами. Этот сервер работает как служба и является внутренним компонентом. Ради простоты я назову его BossCom.
У меня есть еще один внепроцессный COM-сервер, который работает. Для стабильности системы это одноразовый сервер (это означает, что если вы создаете 2 WorkerCom, то работает 2 WorkerCom.exe). Ради простоты я назову его WorkerCom.
WorkerCom может быть запущен чем угодно, даже сам, если кто-то запускает его через командную строку с правильными аргументами командной строки.
Общая цель для BossCom - узнать, что вокруг WorkerComs, знать, что они делают, и иметь возможность отдавать им приказы (пауза, остановка, увеличение и т. Д.).
Сначала я подумал, что всякий раз, когда WorkerCom запускается, он CoCreateInstance создает BossCom и вызывает BossCom-> RegisterWorker (я не знаю). Затем, когда WorkerCom собирается завершить работу, он вызывает BossCom-> UnregisterWorker (я не знаю). BossCom может QueryInterface IUnknown для IWorkerCom и может выдавать команды.
Это бы отлично работало, если бы все эти com-объекты были в одном процессе, но это не так. Я думал об использовании GlobalInterfaceTable, но он является глобальным в смысле одного процесса.
Я провел несколько дней, исследуя это, и растерялся. Может быть, у меня туннельное зрение.
Как я могу вывести ссылку на ком-объект от Рабочего к Боссу?
Да, и, как ни крути, BossCom написан на C #, а WorkerCom написан на ATL C ++, но я возьму решения, написанные на VB, Scala, Lisp или чем-то еще. Я полагаю, я могу перевести основную идею. : -)