COM 使用多线程发送连接点事件的实现

//文章太长了,只摘了点关键。这是C++的写法。Delphi写法如下:

wb1Stream := nil; //这个才是关键;否则出错!
CoMarshalInterThreadInterfaceInStream(IID_IHTMLDocument3,spDoc,IStream(wb1Stream));

/*--------------------------------------------------------------------*/

现在服务可以正常在多线程中发送事件了。

在发送事件函数中值的注意的是这几句。为什么要重新封装。之前不是已经封装好了吗?

因为CoMarshalInterThreadInterfaceInStream在调用这个API时。在解封接口的同时。也把IStream给释放了。所以我们要重新封装起来,要不然下一个事件到达的时候在解封接口的时候就会出错,因为Stream已经释放掉了。。

  1.                                pStream = NULL;  
  2. CoMarshalInterThreadInterfaceInStream(iid,punkConnection,&pStream);  
  3. pThis->m_ThreadStrampArray.SetAt(i,pStream);  
                                   pStream = NULL;
				CoMarshalInterThreadInterfaceInStream(iid,punkConnection,&pStream);
				pThis->m_ThreadStrampArray.SetAt(i,pStream);


以上就是全部实现过程。

转自:http://blog.csdn.net/zdy6367/article/details/7745243

今天够忙的!从早上到现在下午,基本上没停过手!!

posted @ 2012-11-22 17:03  stma  阅读(486)  评论(0)    收藏  举报