我调用一个com组件方法,可能是REMOTE_SERVER,也可能是LOCAL_SERVER,为同步调用,但该方法有可能死锁,我想中断它。
COM在异步调用里提供了ICancelMethodCalls接口,但在同步调用里没有,我寻找MSDN中,发现通过CoEnableCallCancellation这个API可以使线程环境能拥有ICancelMethodCalls接口。但我调用后,通过CoGetCancelObject依然得不到ICancelMethodCalls接口,请高手不吝赐教!

解决方案 »

  1.   

    你打算如何调用和中断?
    如果是你自己实现的接口,是不提供异步调用的。使用CoGetCancelObject只是取得CancelObject,而不能自动帮你生成。
    你必须自己实现CancelObject的功能。
      

  2.   

    我找到个资料,说通过CoEnableCallCancellation函数可使同步调用线程拥有CancelObject,只是会引起系统效率的降低,但我却无法生成这个对象呀
      

  3.   

    IMessageFilter接口的MessagePending方法,自己判断,返回PENDINGMSG_CANCELCALL可以取消调用,至于怎么判断就看你自己了。如果你的客户端用MFC写的话,可以简单的派生MFC对IMessageFilter的实现类COleMessageFilter,override里面的OnMessagePending函数。把COleMessageFilter注销掉,然后重新注册你的类。怎么注销和注册消息过滤的类,请点我的BLOG:
    http://blog.csdn.net/loveghb/archive/2005/08/09/449349.aspx
    希望对你有用。