求助打开office崩溃

bsnry 2012-12-10 02:12:14

DWORD _stdcall ThreadFun(LPVOID p)
{

CoInitialize(NULL);
CApplication objWordApp; //word对象
COleVariant ovTrue((short)TRUE); //true
COleVariant ovFalse((short)FALSE); //false
COleVariant ovOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);



//创建一个IDispatch指针
if (!objWordApp.CreateDispatch("Word.Application"))
{
AfxMessageBox("Couldn't get Word object.");
return -1;
}
objWordApp.put_Visible(TRUE); //显示应用程序
objWordApp.put_DisplayAlerts(FALSE);

CDocuments docs(objWordApp.get_Documents()); //word文档


//CComVariant NewTemplate(false),DocumentType(0),Visible;
//docs.Add(ovOptional,&NewTemplate,&DocumentType,&Visible);


CDocument0 docPrint; //word文档

COleVariant FileName(LPCTSTR(_T("f:\\3.docx")));



COleVariant tempFormat(long(wdOpenFormatDocument),VT_I4);



docPrint=docs.Open(FileName, ovFalse,
ovTrue, ovFalse,
&ovOptional,&ovOptional,
&ovOptional, &ovOptional,
&ovOptional,&tempFormat,
ovOptional,ovFalse,
ovFalse, &ovOptional,
ovTrue, &ovOptional);



open函数崩溃,参数我特意查了, msdn只有2个是必须的,其他都是可选的,所以应该没有问题

注意第11个参数

...全文
126 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
roger_ding 2012-12-10
  • 打赏
  • 举报
回复
引用 4 楼 bsnry 的回复:
问题找到了,是在线程中,导致错误的
恩,以后遇到问题还是要耐心些,有时候你距离解决问题可能只有一步之遥
bsnry 2012-12-10
  • 打赏
  • 举报
回复
问题找到了,是在线程中,导致错误的
bsnry 2012-12-10
  • 打赏
  • 举报
回复
引用 2 楼 bsnry 的回复:
引用 1 楼 roger_ding 的回复:崩溃的log贴出来看看 void __cdecl _NMSG_WRITE ( int rterrnum )中: */ if (rterrnum != _RT_CRNL && rterrnum !……
从这里抛出异常:
void COleDispatchDriver::InvokeHelperV(DISPID dwDispID, WORD wFlags,
	VARTYPE vtRet, void* pvRet, const BYTE* pbParamInfo, va_list argList)
{
// make the call
	SCODE sc = m_lpDispatch->Invoke(dwDispID, IID_NULL, 0, wFlags,
		&dispparams, pvarResult, &excepInfo, &nArgErr);



// throw exception on failure
	if (FAILED(sc))
	{
		VariantClear(&vaResult);
		if (sc != DISP_E_EXCEPTION)
		{
			// non-exception error code
			AfxThrowOleException(sc);
		}

		// make sure excepInfo is filled in
		if (excepInfo.pfnDeferredFillIn != NULL)
			excepInfo.pfnDeferredFillIn(&excepInfo);

		// allocate new exception, and fill it
		COleDispatchException* pException =
			new COleDispatchException(NULL, 0, excepInfo.wCode);
		ASSERT(pException->m_wCode == excepInfo.wCode);
        if (::SysStringLen(excepInfo.bstrSource))
		{
			pException->m_strSource = excepInfo.bstrSource;
		}
        ::SysFreeString(excepInfo.bstrSource);
		if (::SysStringLen(excepInfo.bstrDescription))
		{
			pException->m_strDescription = excepInfo.bstrDescription;
		}
        ::SysFreeString(excepInfo.bstrDescription);
        if (::SysStringLen(excepInfo.bstrHelpFile))
		{
			pException->m_strHelpFile = excepInfo.bstrHelpFile;
		}
        ::SysFreeString(excepInfo.bstrHelpFile);
		pException->m_dwHelpContext = excepInfo.dwHelpContext;
		pException->m_scError = excepInfo.scode;

		// then throw the exception
		THROW(pException);					//这里抛出异常了
	}
bsnry 2012-12-10
  • 打赏
  • 举报
回复
引用 1 楼 roger_ding 的回复:
崩溃的log贴出来看看
void __cdecl _NMSG_WRITE ( int rterrnum )中: */ if (rterrnum != _RT_CRNL && rterrnum != _RT_BANNER && rterrnum != _RT_CRT_NOTINIT) { if (1 == _CrtDbgReport(_CRT_ERROR, NULL, 0, NULL, rterrs[tblindx].rterrtxt)) _CrtDbgBreak(); } #endif /* _DEBUG */ if ( (_set_error_mode(_REPORT_ERRMODE) == _OUT_TO_STDERR) || ((_set_error_mode(_REPORT_ERRMODE) == _OUT_TO_DEFAULT) && (__app_type == _CONSOLE_APP)) ) {
roger_ding 2012-12-10
  • 打赏
  • 举报
回复
崩溃的log贴出来看看

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧