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

GrimAngel GrimAngel 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
这个程序是我参照这里做出来的:

http://yhchinabest.blog.163.com/blog/static/2900648520077331548893/
不是为什么。。我调用了Close()后,用进程管理器看,Excel还在运行的,有高手可

以解释下并给个方法我关了它么?
程序退出了,COM不在了,但如果别人多次操作的话。。会有10几个COM进程在无为占

着内存总不是一件好事吧。

如果要源码可以到这里拿
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,vtMi

ssing,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(); //退出进程
}
...全文

相关推荐

无名管道 进程间的通信

管道实现进程间的通信,是通过无名管道来实现的,父进程写入命令,子进程读出并执行

kekeconfront

如果一个进程fork()后,父子进程都调用了close(),但文件实际上只被关闭了一次,这是怎么做到的?

Unix/Linux文件描述符共享机制解析 摘要: 本文深入解析了Unix/Linux系统中文件描述符共享的核心机制。通过fork()创建子进程时,父子进程会共享相同的文件描述符表项,但各自拥有独立的文件描述符副本。关键在于理解文件系统的三层结构:进程文件描述符表->内核文件表->实际文件inode。当子进程关闭文件描述符时,只会减少文件表的引用计数,而不会立即关闭文件,只有引用计数归零时文件才会真正关闭。文中通过代码示例和内核数据结构分析,展示了文件位置指针共享、引用计数变化等关键行为,并提供

青草地溪水旁

selenium框架中driver.close()和driver.quit()关闭浏览器

Windows系统上,每次运行完selenium程序后,chromedriver.exe进程总是不能彻底关闭。 网上参考了如下文章:https://www.jb51.net/article/201622.htm selenium操作chrome浏览器需要有ChromeDriver驱动来协助。webdriver中关浏览器关闭有两个方法,一个叫quit,一个叫close。 /** * Close the current window, quitting the browser if it's the last window currently open. */ void close(); /*

weixin_38656142

探索浏览器页面关闭window.close()的使用详解

说起来window.close(),这也是个“不太让人省心”的角色。因为浏览器兼容性千差万别,还对他有诸多限制。

weixin_38737283

window.close(); 关闭浏览器窗口js代码的总结介绍

window.close(); 关闭浏览器窗口js代码的总结介绍 序号 关闭代码 需要确认 无任何作用 无需确认 测试 1 window.close() IE7 firefox,chrome, safari Opera Close 2 window.opener=null; window.open(”,’_self’); window.close();   firefox IE7,Opera, chrome,safari Close 3 window.open(”,’_self’); window.close();   firefox IE7,Opera, chrome,sa

weixin_38745434
评论 32
收藏 已收藏
分享
返回顶部
GrimAngel
ATL 3,248 成员 48,530 内容