问题:
问题1:
HRESULT hr = m_spCom.CreateInstance(__uuidof(Event1) );
// IEvent1Ptr m_spCom;
com接口: class ATL_NO_VTABLE CEvent1 : 
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CEvent1, &CLSID_Event1>,
public IEvent1    //IEvent1是接口我们常见的加载方式是:CoCreateInstance,然后传这个com对象的CLSID,还有接口的iid你看它用了 m_spCom.CreateInstance(__uuidof(Event1) );这一句代码,是什么意思,获得什么接口?如果 我们的com对象有多个接口呢, 是获得哪一个?问题2:还有:按照获得的一次接口,调用接口的一个函数,那么我们就得 addref一次,release一次。请问:m_spCom.CreateInstance(__uuidof(Event1) );这种方式,似乎不需要啊!

解决方案 »

  1.   

    1 去看IEvent1Ptr的定义
    2 IEvent1Ptr的模板类_com_ptr_t自己做了AddRef和Release
      

  2.   

    在学com
    看的一本老书   com+编程指南有兴趣可以一起看这本书
      

  3.   

    addref, release什么时候使用合适呢,我觉得atl已经屏蔽了这个的细节了说实话,我是搞不清什么时候使用的,我看饿了一些代码,发现他们很少用嘴原始的addref, release, 要么用 XXPtr,或者comptr屏蔽
      

  4.   

    打字错误了,是ccomptr这个智能指针吧
      

  5.   

    _com_ptr_t 和 CComPtr 都是模板,直接都有代码的。
    看看实现不就知道啥时候调用了么?
    lz可以看看这本书
    深入解析ATL(第2版)