这是我的another Q的一个变体。我有两个应用程序,X和Y。它们必须在它们之间共享一个COM对象。X将向该对象发送数据,而Y将对从该应用程序发送的事件作出响应。在任何时刻,X或Y都可能被终止,但是单例需要保持活动状态,直到两个应用程序都被终止。
应该可以这样创建一个单独的COM对象,但是如果X首先启动并创建它,Y然后启动并使用它,然后X停止并...单例发生了什么?
不管怎样,有没有人在Delphi上尝试过这个?
发布于 2010-11-05 05:24:38
我认为你遗漏了COM的一个核心要点。COM只是一般IPC的一步操作,我的意思是,COM进程只存在于一个进程(甚至线程,但这就是公寓故事的用武之地)。如果您从两个进程访问一个COM对象,则其中一个进程实际上正在将来自该对象的调用编组为“平面数据”,并将消息发送到另一个进程的隐藏窗口句柄。
为了能够做你所描述的事情,你必须担心当“拥有的进程”想要关闭对象时该如何处理该对象,并且必须“挂起”该对象(例如,通过序列化),并要求其他进程之一“恢复”该对象,并取得所有权并开始运行该对象。
我建议您创建第三个进程,特别是只运行您希望在其他进程中使用的单例对象。这样,你就可以让正常的引用计数和COM激活来完成它的工作,并且你可以按照它应该工作的方式来使用COM。
https://stackoverflow.com/questions/4101311
复制相似问题