gpt4 book ai didi

c++ - COM 自动化后 Excel 进程不会退出

转载 作者:太空宇宙 更新时间:2023-11-04 14:33:00 26 4
gpt4 key购买 nike

我需要自动化特定版本的 Excel (2003),独立于目标机器上安装的默认版本。为此,我使用以下步骤:

  • 通过向 CreateProcess 提供所需的可执行文件来启动 Excel
  • 使用 EnumWindowsEnumChildWindows 找到主窗口和可访问窗口
  • 使用 AccessibleObjectFromWindow 从 Excel 对象模型中获取对象
  • 通过 COM 智能指针实现自动化

一切正常,但在 ExcelApplication 对象上调用 Quit 后,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();

最佳答案

Microsoft 不再支持您的操作:http://support.microsoft.com/kb/257757 (它谈论的是服务器端代码,但它引用了任何非交互式解决方案,而不考虑体系结构)。

尽管如此,我相信我不久前在某些 .Net 代码中遇到了类似的问题,解决方案是在完成 Excel 后强行终止它。不过,我不记得必须这样做的确切原因。

关于c++ - COM 自动化后 Excel 进程不会退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4852135/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com