为什么调用了Close()后,进程还是没有关闭的?

GrimAngel 2009-11-16 06:23:35
这个程序是我参照这里做出来的:http://yhchinabest.blog.163.com/blog/static/2900648520077331548893/
不是为什么。。我调用了Close()后,用进程管理器看,Excel还在运行的,有高手可以解释下并给个方法我关了它么?

如果要源码可以到这里拿
www.126.com
帐号:CSDNtest1
密码:CSDNtest

代码主要如下:
_Application oApp; //Excel进程对象
Workbooks oWorkbooks; //工作簿集合
_Workbook oWorkbook; //工作簿对象
Worksheets oWorksheets; //工作表集合
_Worksheet oWorksheet; //工作表
Range oRange; //代表某一单元格、某一行、某一列、某一选定区域
void CMy1Dlg::OnButton1()
{
// TODO: Add your control notification handler code here
CString str1 = "c:\\CJWL081.xls";
char *buf1 = str1.GetBuffer(str1.GetLength());
NewApplication();
Open(buf1);
Read(1);
Close();

oWorksheet.ReleaseDispatch();
oApp.ReleaseDispatch();
oRange.ReleaseDispatch();
oWorkbooks.ReleaseDispatch();
oWorkbook.ReleaseDispatch();
oWorksheets.ReleaseDispatch();

CannotFindN.RemoveAll();
SearchName1.RemoveAll();
SearchName2.RemoveAll();
Name.RemoveAll();
FetionID.RemoveAll();
Telephone.RemoveAll();
Telephone1.RemoveAll();
}

void CMy1Dlg::NewApplication()
{
if (!oApp.CreateDispatch("Excel.Application",NULL))
{
AfxMessageBox("创建Excel服务失败!");
exit(1);
}
oWorkbooks=oApp.GetWorkbooks(); //获取当前工作簿集合
}

void CMy1Dlg::Open(char *pFilename)
{
oWorkbook=oWorkbooks.Open(pFilename,vtMissing,vtMissing,vtMissing,vtMissing, //打开一个Excel文件
vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing); //并指定其为当前工作簿
}

void CMy1Dlg::Read(int Value)
{
oWorksheets=oWorkbook.GetWorksheets(); //获得工作表集合
oWorksheet=oWorksheets.GetItem(_variant_t((long)1)); //假定只有一张表
oRange=oWorksheet.GetRange(_variant_t("A1"),vtMissing); //选择第一列
_variant_t Value2=oRange.GetItem(_variant_t((long)1),_variant_t((long)1));
CString str = (LPCTSTR)_bstr_t(Value2);
MessageBox(str);
}


void CMy1Dlg::Close()
{
oWorkbook.Close(vtMissing,vtMissing,vtMissing); //关闭当前工作簿
oApp.Quit(); //退出进程
}
...全文
263 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
GrimAngel 2009-11-20
  • 打赏
  • 举报
回复
继续顶上去吧。
GrimAngel 2009-11-19
  • 打赏
  • 举报
回复
程序退出了,COM不在了,但如果别人多次操作的话。。会有10几个COM进程在无为占着内存总不是一件好事吧。
maple_zhj 2009-11-19
  • 打赏
  • 举报
回复
不了解情况,

如果你的控制程序退出了?

COM 还在?
江川 2009-11-19
  • 打赏
  • 举报
回复
退出的时候直接exit(0)彻底退出就是了。
使用一些COM或者多线程的时候很多无法彻底退出的。
fishion 2009-11-18
  • 打赏
  • 举报
回复
oApp = NULL;
GrimAngel 2009-11-18
  • 打赏
  • 举报
回复
继续顶上去了。
GrimAngel 2009-11-17
  • 打赏
  • 举报
回复
三楼。。
oWorkbooks是没有SetSaved这个方法的。。。
GrimAngel 2009-11-17
  • 打赏
  • 举报
回复
又要继续顶上去了。
  • 打赏
  • 举报
回复
线程没有正常结束???
zgl7903 2009-11-16
  • 打赏
  • 举报
回复
退出前保存

oWorkbooks.SetSaved(true);
oApp.Quit();
oWorkbook.SetSaved(true);
oWorkbooks.Close();
happy4346 2009-11-16
  • 打赏
  • 举报
回复
这个真没招儿。。_Application oApp; oApp只要还存在,你Quit,它也在,还是KillProcess把,查找Excel.exe,直接干掉它吧。

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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