在我发布最后一个COM接口后,为什么MS Word没有关闭?

时间:2012-07-24 07:58:17

标签: c++ com word-automation

我认为COM自动化对象在发布最后一个接口时会自行关闭。

但是,此代码打开然后释放MS Word接口会使WINWORD.EXE进程运行。我已经跟踪了它,我知道iUnkn->Release()正在被调用。

我在这里做错了什么?

if (SUCCEEDED(CoInitialize(NULL)))
{
    CLSID clsid;
    if (SUCCEEDED(CLSIDFromProgID(OLESTR("Word.Application"), &clsid)))
    {
        IUnknown* iUnkn = NULL;
        if (SUCCEEDED(CoCreateInstance(clsid, NULL, CLSCTX_SERVER, Word::IID__Application, (void**) &iUnkn)) && iUnkn)
        {
            iUnkn->Release();
        }
    }

    CoUninitialize();
}

1 个答案:

答案 0 :(得分:1)

这是设计的。

当释放对其Application COM接口的最后一个引用时,没有任何强制Word退出(假设您的代码实际保存的引用是最后一个)。该应用程序可以并将继续为将来的请求提供服务。

如果您希望退出该流程,则必须查询IDispatch的{​​{1}}界面并调用其Quit()方法。