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

これは仕様によるものです。

ApplicationCOMインターフェイスへの最後の参照が解放されたときにWordを強制的に終了させるものはありません(コードが実際に保持している参照が最後のものであると想定しています)。アプリケーションは、将来の要求に対応するために使用できます。

プロセスを終了する場合は、のIDispatchインターフェイスをクエリして、 Quit()メソッドWord.Applicationを呼び出す必要があります。

于 2012-07-24T08:04:09.417 に答える