描述:
退出时出现异常,不知为什么?
COleVariant vTrue((short)TRUE),
vFalse((short)FALSE),
vOpt((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
//开始一个新的Microsoft Word 2000实例
_Application oWordApp;
if (!oWordApp.CreateDispatch("Word.Application", NULL))
{
AfxMessageBox("CreateDispatch failed.", MB_OK | MB_SETFOREGROUND);
return;
}
//创建一个新的word文档
Documents oDocs;
_Document oDoc;
oDocs = oWordApp.GetDocuments();
oDoc = oDocs.Add(vOpt, vOpt, vOpt, vOpt);
//把文本添加到word文档
Selection oSel;
oSel = oWordApp.GetSelection();
oSel.TypeParagraph();
InlineShapes inlineshapes;
LPDISPATCH pInlineShapes = oSel.GetInlineShapes();
inlineshapes.AttachDispatch(pInlineShapes);
Paragraphs oParagraphs (oDoc.GetParagraphs ());
Paragraph oParagraph (oParagraphs.GetLast ());
Range oTargetRange (oParagraph.GetRange());
VARIANT vTargetRange;
vTargetRange.vt = VT_DISPATCH;
vTargetRange.pdispVal = oTargetRange.m_lpDispatch;
//添加像信息
CString filePath="c:\\11.jpg";
CComVariant LinkToFile(false),SaveWithDocument(true);
inlineshapes.AddPicture(filePath,&LinkToFile,&SaveWithDocument,&vTargetRange);
//保存word文档
_Document oActiveDoc;
oActiveDoc = oWordApp.GetActiveDocument();
oActiveDoc.SaveAs(COleVariant("c:\\Test1.doc"),
COleVariant((short)0),
vFalse, COleVariant(""), vTrue, COleVariant(""),
vFalse, vFalse, vFalse, vFalse, vFalse);
inlineshapes.ReleaseDispatch();
oSel.ReleaseDispatch();
//退出word应用程序
oWordApp.Quit(vOpt, vOpt, vOpt);
解决方案1:
就按WORD 宏里的代码来改一下,
通常不会出错的
应该是对象析构产生的问题。
最后一条语句
oWordApp.Quit(vOpt, vOpt, vOpt);
执行完后除oWordApp外其他对象(com)已经不存在。这条语句后你的函数结束,里面的局部对象都将被自动析构,此时将自动释放已经不存在了的com对象,这就有了问题。
解决办法是,运行中或最后用ReleaseDispatch逐步释放不用的com对象。
要先释放Documents 对象