1

我认为 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();
}
4

1 回答 1

1

这是设计使然。

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

如果您希望进程退出,则必须查询其IDispatch接口Word.Application并调用其Quit()方法。

于 2012-07-24T08:04:09.417 回答