实现Com连接点产生异常(0x80020010 无效的被呼叫方)解决办法
2014-01-18 02:03
826 查看
今天用IDispEventSimpleImpl(IDispEventImpl)在客户代码中实现了一个回调接口类,但是在运行时造成异常,提示0x80020010 无效的被呼叫方,应google,发现接口类中函数没有使用__stdcall声明,造成了这种异常,随笔记一下,写了下实现代码,供查阅
PS. 经调试发现,注释掉语句sink.DispEventUnadvise(spObj)后,spObj执行Release时对象依然会被释放,所以个人认为挂载回调接口不会增加com对象的计数。
//Sink.h extern const IID DIID__IShopStaObjEvents; extern _ATL_FUNC_INFO ResultInfo; class CSink : public CComObjectRootEx<CComSingleThreadModel>, public CComCoClass<CSink>, public IDispEvent(Simple)Impl<1, CSink, &DIID__IShopStaObjEvents>, public IUnknown { public: typedef IDispEvent(Simple)Impl<1, CSink, &DIID__IShopStaObjEvents> _baseCls; BEGIN_COM_MAP(CSink) COM_INTERFACE_ENTRY_IID(IID_IDispatch, _baseCls) END_COM_MAP() BEGIN_SINK_MAP(CSink) SINK_ENTRY_INFO(1, DIID__IShopStaObjEvents, 1, Pay, &ResultInfo) END_SINK_MAP() void __stdcall Pay(LONG lResult) { int i=lResult; i++; } };
// Sink.cpp const IID DIID__IShopStaObjEvents = __uuidof(_IShopStaObjEvents); _ATL_FUNC_INFO ResultInfo = { CC_STDCALL, VT_EMPTY, 1, {VT_I4}};
//main.cpp CAppModule _Module; CComObject<CSink> sink; int _tmain(int argc, _TCHAR* argv[]) { _Module.Init(NULL,NULL); CoInitializeEx(NULL,COINIT_APARTMENTTHREADED); IShopStaObjPtr spObj; HRESULT hr; sink.AddRef(); hr = spObj.CreateInstance(__uuidof(ShopStaObj)); sink.DispEventAdvise(spObj); spObj->Buy(4); sink.DispEventUnadvise(spObj); spObj.Release(); return 0; }
PS. 经调试发现,注释掉语句sink.DispEventUnadvise(spObj)后,spObj执行Release时对象依然会被释放,所以个人认为挂载回调接口不会增加com对象的计数。
相关文章推荐
- 解决检索 COM 类工厂中 CLSID 为 {96749377-3391-11D2-9EE3-00C04F797396} 的组件失败,异常0x80040154,没有注册类问题分析和解决办法
- Oracle10g安装过程中"无法确定主机的IP地址时产生该异常错误" :解决办法
- Oracle10g安装过程中"无法确定主机的IP地址时产生该异常错误" :解决办法
- 无效的Formatetc结构(异常来自HRESULT.)"错误解决办法
- Oracle10g安装过程中"无法确定主机的IP地址时产生该异常错误" :解决办法(转)
- win8 无法显示桌面,运行explorer.exe 提示 0xc0000018 异常 解决办法
- 获取xml时,出现“(十六进制值 0x1F)是无效的字符之类Xml异常的解决办法
- iTunes无法验证服务器"s.mzstatic.com"的身份 服务器证书无效 解决办法
- java.lang.IllegalStateException异常产生的原因及解决办法
- 也谈“指定的 SOAPAction 无效”异常的解决办法 ”
- Spring 3.1 注释方式实现拦截器无效问题解决办法
- Oracle11g安装过程中"无法确定主机的IP地址时产生该异常错误" :解决办法
- Oracle10g安装过程中"无法确定主机的IP地址时产生该异常错误" :解决办法
- 关于yahoo.com.cn邮箱导入Gmail邮箱验证异常的机制解析及解决办法
- org.dom4j.DocumentException: 2 字节的 UTF-8 序列的字节 2 无效。 Nested exception: 2 字节的 UTF-8 序列的字节 2 无效。异常解决办法
- Oracle10g安装过程中"无法确定主机的IP地址时产生该异常错误" :解决办法
- ArcEngine中HRESULT:0x80040228 异常解决办法
- java.lang.IllegalStateException异常产生的原因及解决办法
- 串口调试,提示the given port name does not start with COM/com异常解决办法,,发现是打印机在搞怪
- the given port name does not start with COM/com异常解决办法