4

这是我的另一个 Q的变体。我有两个应用程序,X 和 Y。它们必须在它们之间共享一个 COM 对象。X 将向该对象发送数据,Y 将响应从该应用程序发送的事件。在任何时候,X 或 Y 都可能被终止,但单例需要保持活动状态,直到两个应用程序都终止。
应该可以通过这种方式创建单例 COM 对象,但是如果 X 先启动并创建它,Y 然后启动并使用它,然后 X 停止,然后……单例会发生什么?
无论如何,有没有人用Delphi试过这个?

4

1 回答 1

6

我认为您缺少 COM 的核心观点。COM 只是一般 IPC 的一个步骤,我的意思是,COM 进程只存在于一个进程中(甚至是线程,但这就是公寓故事的来源)。如果您从两个进程访问一个 COM 对象,则一个进程实际上将来自和到该对象的调用编组为“平面数据”,并将消息发送到另一个进程的隐藏窗口句柄。

为了能够做您所描述的事情,您必须担心当“拥有进程”想要关闭时如何处理对象,并且必须“暂停”对象(例如通过序列化)并询问其他进程之一“恢复”对象并承担所有权并开始运行该对象。

我建议你创建第三个进程,特别是运行你想在其他进程中使用的这个单例对象。通过这种方式,您可以让正常的引用计数和 COM 激活完成它的工作,并且您将按照它应该工作的方式使用 COM。

于 2010-11-04T21:24:38.233 回答