oh my god! so boring !complication!

解决方案 »

  1.   

    thanking for your up.
    在Release处如果不设置断点,直接运行,就不会有exception发生。
    会不会和调试机制有关呢?
      

  2.   

    如果再没有人来,我只好给sunnyrover分了。
      

  3.   

    Maybe! you are a clever rabbit.an excellent programer.gege...
      

  4.   

    pDispActiveDoc = vResult.pdispVal;这句有明显问题,按照COM规则,接口指针赋值时,必须调用AddRef()。否则Release()回引发异常。
      

  5.   

    程序中AddRef()和Release()十分混乱。建议使用灵巧指针。
      

  6.   

    m_pDispDocs = vResult.pdispVal;  // m_pDispDocs的引用计数是1
    pDispActiveDoc = vResult.pdispVal; //pDispActiveDoc的引用计数是1
    所以后面的m_pDispDocs->Release(),pDispActiveDoc->Release()不会有错。
    因为在Invoke中返回接口指针时已经作了AddRef(),这是COM规范。
    问题出在m_pDispApp的引用计数上。
      

  7.   

    得到m_pDispApp后,m_pUnk的引用计数由原来的1变为2,且m_pDispApp的引用计数也是2,但二指针的值是不相同的,为什么?
      

  8.   

    我想我找到原因了。还是quit的原因。执行quit方法后,实例已经释放,相当于已经执行了Release()中的delete this,再次作release()释放,当然会出异常,但可以忽略。