hr1 = 0x80020009 发生意外。
来源:互联网 发布:微软云计算 编辑:程序博客网 时间:2024/06/14 22:05
环境:win7 64位,vs2008,wps2013
错误代码:
BOOL CWPSOper::ConvertToPdf(IDispatch* lpDoc,_bstr_t sTargetPath){CComVariant varParams[15]; varParams[1].vt = VT_I4; varParams[1].iVal = 1; varParams[0].vt = VT_BYREF|*/VT_VARIANT; varParams[0].pvarVal = &(varParams[1]); CComVariant varRet, varRet2, varRet3; HRESULT hr1 = GetProperty(lpDoc, L"Application", &varRet); HRESULT hr2 = GetProperty(varRet.pdispVal, L"Documents", &varRet2); hr1 = InvokeN(varRet2.pdispVal, L"Item", varParams, 1, &varRet3);}HRESULT InvokeN(IDispatch *pDisp, LPCOLESTR lpszName, VARIANT *varParams, int nParams, VARIANT *pvarRet){ if(pDisp == NULL) return E_FAIL; HRESULT hr; DISPID dispid; hr = pDisp->GetIDsOfNames(IID_NULL, (LPOLESTR*)&lpszName, 1, LOCALE_USER_DEFAULT, &dispid); if (SUCCEEDED(hr)) { DISPPARAMS dispparams = { varParams, NULL, nParams, 0}; return pDisp->Invoke(dispid, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD, &dispparams, pvarRet, NULL, NULL); } return hr; }
解决:
而通过vc添加typelib中类,通过wpsapi.dll生成CDocument,CDocuments,CApplication三个类,然后调试跟到oledisp2.cpp中的
SCODE sc = m_lpDispatch->Invoke(dwDispID, IID_NULL, 0, wFlags,
&dispparams, pvarResult, &excepInfo, &nArgErr);
发现dispparams的iVal值为0x00000001
而我的错误代码中iVal值为0xcccc0001
然后源代码改为varParams[1].lVal = 0x00000001;
结果就返回正确值S_OK了
原因:显而易见,variant是union类型, iVal只是lVal中的后半段内存,但是com处理invoke调用应该统一使用long,不会又是long又是int
0 0
- hr1 = 0x80020009 发生意外。
- 发生意外错误0x8ffe2740 ~!!
- 发生意外错误0x8ffe2740
- IIS发生意外错误0x8ffe2740
- IIS发生意外错误0x8ffe2740
- IIS发生意外错误0x8ffe2740
- IIS发生意外错误0x8ffe2740
- IIS发生意外错误0x8ffe2740
- IIS发生意外错误0x8ffe2740
- IIS发生意外错误0x8ffe2740
- IIS发生意外错误0x8ffe2740
- IIS发生意外错误0x8ffe2740
- IIS 发生意外错误 0x8ffe2740
- IIS发生意外错误0x8ffe2740
- 错误:模块CSW.dll已加载,但对dllregisterserver的调用失败,错误代码0x80020009
- IIS 启动不了 【发生意外错误0x8ffe2740】
- IIS错误信息:发生意外错误0x8ffe2740
- iis无法启动,发生意外错误0x8ffe2740
- ptrace截获其他进程系统调用
- oracle 中获取字符串的长度并截取长度
- Android中startActivity中的permission检测与UID机制
- 用户暴增下的收入降低,AWS面临尴尬
- 串的模式匹配
- hr1 = 0x80020009 发生意外。
- MYSQL入门学习之七:MYSQL常用函数
- 开发USB产品模块技术指南
- php返回json数据中文显示的问题
- hdu4807枚举费用流
- 前端模块化开发的价值
- javaWeb中的JSP知识
- MYSQL入门学习之八:数据库及表的基本操作
- Eclipse使用