那帖我不能再加分了,重开帖。

解决方案 »

  1.   

    不需要,只需要按com规范release就行了。
      

  2.   

    当然需要释放,按照ATL模板创建的组件内部都在维护引用计数,所以CreateInstance产生的对象也一样需要调用Release。
    你创建出来的IDispatch*可以缓存起来,在调用了unadvise之后就可以Release了。
      

  3.   

    我明白1楼的意思,其实是统一的,1楼是说不能直接delete,而是要通过Release来间接释放。
      

  4.   

    IDispatch* pEvent = NULL; 
    MyInspectorEvent::CreateInstance(&pEvent); 
    MyInspectorEvent* p = (CMyInspectorEvent*)pEvent; 
    hr = p->DispEventAdvise((IDispatch*)spInspector);
    pEvent->Release(); //这里就可以release了吧?
    在DispEventUnadvise时,我是由activeInspector来得到当前的inspector对象指针作为参数的,是否可以?还是非要保持这个IDispatch* pEvent?
      

  5.   

    最好缓存,要不然你调用unadvise时从哪得到参数?