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