COM高手看过来:如下的Word automation的代码,在release时为什么会发生一个异常? oh my god! so boring !complication! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 thanking for your up.在Release处如果不设置断点,直接运行,就不会有exception发生。会不会和调试机制有关呢? 如果再没有人来,我只好给sunnyrover分了。 Maybe! you are a clever rabbit.an excellent programer.gege... pDispActiveDoc = vResult.pdispVal;这句有明显问题,按照COM规则,接口指针赋值时,必须调用AddRef()。否则Release()回引发异常。 程序中AddRef()和Release()十分混乱。建议使用灵巧指针。 m_pDispDocs = vResult.pdispVal; // m_pDispDocs的引用计数是1pDispActiveDoc = vResult.pdispVal; //pDispActiveDoc的引用计数是1所以后面的m_pDispDocs->Release(),pDispActiveDoc->Release()不会有错。因为在Invoke中返回接口指针时已经作了AddRef(),这是COM规范。问题出在m_pDispApp的引用计数上。 得到m_pDispApp后,m_pUnk的引用计数由原来的1变为2,且m_pDispApp的引用计数也是2,但二指针的值是不相同的,为什么? 我想我找到原因了。还是quit的原因。执行quit方法后,实例已经释放,相当于已经执行了Release()中的delete this,再次作release()释放,当然会出异常,但可以忽略。 水,试试发帖助手 【请教】如何将数据“动态”存入到Excel中? 如何得到自己的版本信息? 如何让窗口响应右键移动? VC中的输出栏是怎么做的? 如何监视写文件时写入的数据? bmp格式与ico的格式是一样的,我怎么将HICON转化为HBITMAP呢? 請問各位DirectX高手 程序运行多次之后出现该内存不能为“written” windows程序也是一个循环而已,它是怎么做到在没有消息时不占用cpu资源的 如何打开.x文件? 请问WM_TIMER消息有什么用啊!!!
在Release处如果不设置断点,直接运行,就不会有exception发生。
会不会和调试机制有关呢?
pDispActiveDoc = vResult.pdispVal; //pDispActiveDoc的引用计数是1
所以后面的m_pDispDocs->Release(),pDispActiveDoc->Release()不会有错。
因为在Invoke中返回接口指针时已经作了AddRef(),这是COM规范。
问题出在m_pDispApp的引用计数上。