关于CoRevokeClassObject的MSDN文章有什么好处?

时间:2009-08-20 15:03:55

标签: windows winapi com

CoRevokeGetClassObject()上的

MSDN article表示当COM服务器调用它时,不释放客户端引用的类对象。然后是以下内容:

  

如果其他客户端仍然有指向类对象的指针并且通过调用IUnknown :: AddRef导致引用> count增加,则引用计数将不会是>零。发生这种情况时,如果后续调用(对IUnknown :: AddRef和IUnknown :: Release有明显的>例外)失败,应用程序可能会受益。

“应用程序可能会从中受益”是什么意思?类对象未释放,但创建请求失败。听起来很合理,但有什么好处?

1 个答案:

答案 0 :(得分:0)

是的,这是一个非常奇怪的词汇......

我认为他们试图说的是,如果客户从刚刚调用CoRevokeClassObjects的服务器创建对象,那么客户可能会陷入棘手的境地,因为它很可能会很快消失({{当服务器关闭时,例行调用1}}。

因此,如果激活调用(CoRevokeClassObjects)没有失败,客户端将返回一个接口指针,一旦它们调用了一个方法,它们就会从RPC中获得错误服务器已经消失的层。

我认为这在某种程度上是“有益的”: - )

那就是说,我不确定如何检测通过IClassFactory::CreateInstance与其他客户端调用IUnknown::Release的情况,但我想撤销工厂的代码可以设置一些全局状态或者 - 在让创作请求通过之前他们可以检查的状态。