我有一个需要密切关注的进程外 COM 服务器。该服务器作为服务运行,并且在内部是单例的。为简单起见,我称他为 BossCom。
我有另一个进程外 COM 服务器,它是一个工作者。为了系统的稳定性,它是一个一次性服务器(这意味着如果你创建 2 个 WorkerCom,则有 2 个 WorkerCom.exe 正在运行)。为简单起见,我称他为 WorkerCom。
WorkerCom 可以由任何东西启动,即使有人通过带有正确命令行参数的命令行运行它,它也可以由它自己启动。
BossCom 的总体目标是了解周围的 WorkerCom,知道他们在做什么,并能够给他们下达命令(暂停、停止、加速等)。
我最初的想法是,每当 WorkerCom 启动时,他都会 CoCreateInstance 一个 BossCom 并调用 BossCom->RegisterWorker(IUnknown me)。然后当 WorkerCom 即将关闭时,他会调用 BossCom->UnregisterWorker(IUnknown me)。BossCom 可以为 IWorkerCom 查询接口 IUnknown 并能够发出命令。
如果所有这些 com 对象都在同一个进程中,那将非常有用,但事实并非如此。我考虑过使用 GlobalInterfaceTable,但它只是在单个进程的意义上是全局的。
我花了几天时间研究这个并且不知所措。也许我是隧道式的。
如何将 com 对象的引用从 Worker 编组到 Boss?
哦,而且,不管怎样,BossCom 是用 C# 编写的,而 WorkerCom 是用 ATL C++ 编写的,但我会采用用 VB、Scala、Lisp 或任何东西编写的解决方案。我想我可以翻译核心思想。:-)