1
我需要自动化特定版本的Excel(2003),与目标机器上安装的默认版本无关。为此,我使用以下步骤:Excel进程在COM自动化后不会退出
- 启动Excel通过提供所需的可执行文件CreateProcess的
- 找到EnumWindows的和EnumChildWindows
- 使用主,访问窗口AccessibleObjectFromWindow从Excel对象模型中获取对象
- 通过COM智能指针做自动化的东西
这一切工作正常,但一个电话的ExcelApplication对象退出后Excel进程将不会终止。与Word相同的设置按预期工作,并且该过程按其应有的方式终止。任何想法为什么Excel的行为不同,将不胜感激。
我从.NET中自动化Excel中读到了类似问题,其中悬挂COM引用是原因。但是,如果这也是我的C++情况的原因,我不明白为什么。即使我什么都不做,除了退出,过程仍然活着:
/* create process, get handle to accessible Excel window */
Excel11::_ApplicationPtr excelApplication;
try
{
Excel11::WindowPtr::Interface* pInterface;
if (::AccessibleObjectFromWindow(hwndExcelAccessible, OBJID_NATIVEOM, IID_IDispatch, reinterpret_cast< void** >(&pInterface)) == S_OK)
{
excelApplication = pInterface->Application;
pInterface->Release();
}
}
catch (_com_error& e) { /* omitted */ }
excelApplication->Quit();
你是否放弃了COM智能指针? – 2011-01-31 14:43:46