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个参数
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)) )
{
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); //这里抛出异常了
}