2012-07-24 49 views
1

我認爲COM自動化對象在最後一個接口發佈時會自行關閉。爲什麼我發佈最後一個COM接口後沒有關閉MS Word?

但是,此代碼打開然後釋放到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

這是設計。

當最後一次引用其Application COM接口的最後一個引用被釋放時(假設您的代碼實際上持有的引用實際上是最後一個引用),任何事都不會強制Word退出。應用程序可以並且將繼續爲將來的請求提供服務。

如果你想要退出進程,你將不得不查詢Word.ApplicationIDispatch接口並調用它的Quit()方法。

+0

我只是用Excel試過相同的代碼,當我調用'iUnkn-> Release()'時它確實關閉了。我想這隻取決於特定的應用程序。 – sashoalm 2012-07-24 08:54:11

相關問題