我认为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();
}
这是经过设计的。
当释放对其Application
COM接口的最后一个引用时,没有任何内容强制Word退出(假设代码中包含的引用实际上是最后一个)。该应用程序可以并且将继续为未来的请求提供服务。
如果您希望进程退出,则必须查询Word.Application
的IDispatch
接口并调用其Quit()方法。