总是在 COleDispatchDriver::ReleaseDispatch() 内部 m_lpDispatch = NULL; 处触发异常

最近,想从 VB /  VBA 环境转移到 VC++  学习 MFC 编程。

决定先将在 VBA  中写的一段代码(实现批量打印Word文档功能)用 MFC 来实现,练练手先。

安装的是 VS2010 VC++,要用 MFC 操作 WORD 对象,开始考虑脱离Office程序,难度太大,先用从类型库向导中用“添加类”创建 IDispatch 包装类的办法吧。

通过在网上大量搜索,

先找到了 xiangjianbo127 的《VS2010操作Word建立工程》:

http://blog.csdn.net/xiangjianbo127/article/details/8610007
http://blog.csdn.net/xiangjianbo127/article/details/8610413
http://blog.csdn.net/xiangjianbo127/article/details/8610755
http://blog.csdn.net/xiangjianbo127/article/details/8610829
http://blog.csdn.net/xiangjianbo127/article/details/8610853
http://blog.csdn.net/xiangjianbo127/article/details/8610858

后来找到了博客园http://www.cnblogs.com上 小鱼儿C 的《c++封装Word (比较全了)》:

http://www.cnblogs.com/c-study/archive/2012/01/04/2311772.html

参照他们的代码,写出了我需要的MFCWord类,最近三个晚上的调试把我折磨得够惨!不断反复触发异常:

“Duprint.exe 中的 0x769dc6b4 处有未经处理的异常: 0xC0000005: 读取位置 0xfeeefeee 时发生访问冲突

编译器绿色箭头停在 void COleDispatchDriver::ReleaseDispatch() 函数中 m_lpDispatch = NULL; 语句上,大意可能是指针已经释放,所以出错。整个网络世界搜索,也没有好的解决办法。对 COM 初始化语句和 m_Doc.ReleaseDispatch(); m_Docs.ReleaseDispatch(); m_App.ReleaseDispatch(); 语句进行各种各样可能的调整都无济于事。

还好,今晚(实际上当时已算成昨天了!)又查看了杨老师《COM 组件设计与应用(十一)IDispatch 及双接口的调用》中的示例代码,发现了一点端倪:

pDisp->Release();        // 释放接口指针
::CoUninitialize();     // 释放 COM

释放接口指针,再释放 COM !

而前面, xiangjianbo127 和 小鱼儿C 的代码是释放 COM ,再释放接口指针!这是不是问题所在?

调整顺序之后,正常执行……好轻松,特记于此!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值