【问题标题】:What benefit does MSDN article on CoRevokeClassObject talk about?MSDN 关于 CoRevokeClassObject 的文章谈到了什么好处?
【发布时间】:2009-08-21 23:07:11
【问题描述】:

MSDN article CoRevokeGetClassObject() 表示当 COM 服务器调用它时,客户端引用的类对象不会被释放。然后来了:

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

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

【问题讨论】:

    标签: windows winapi com


    【解决方案1】:

    是的,这是一个非常奇怪的转折......

    我认为他们想说的是,如果客户端从刚刚调用 CoRevokeClassObjects 的服务器创建对象,他们最终可能会遇到棘手的情况,因为它很可能很快就会消失(CoRevokeClassObjects 是当服务器关闭时例行调用。)

    所以,如果激活调用 (IClassFactory::CreateInstance) 没有失败,客户端将返回一个接口指针,并且一旦调用它的方法,它们就会从 RPC 层收到一个错误服务器不见了。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-25
      • 2011-09-09
      • 1970-01-01
      • 2014-02-24
      • 1970-01-01
      相关资源
      最近更新 更多