5

Visual Studio プロジェクトの参照をいくつかの COM ライブラリに追加しました。メソッドでオブジェクトを作成すると、プログラムがそのメソッドを離れたときに、この COM オブジェクトは自動的に解放されますか? それとも、これらのオブジェクトを常に手動でリリースする必要がありますか? (ReleaseComObject または FinalReleaseComObject?)。

4

2 に答える 2

3

これは確かに自動的に行われるわけではなく、場合によっては、このブログ投稿 で説明されているMarshal.ReleaseComObjectように (を呼び出して)行うのが危険な場合があります。

In-Proc COM オブジェクトの場合、多くの場合、COM オブジェクトをまったく解放する必要はありません。

Out-Proc COM オブジェクトの場合、.NET クライアントからの自動化後に Office アプリがシャットダウンに失敗するなどの問題を防ぐために、それらを解放することが重要になる場合があります。

この場合、上記のリンク先のブログ投稿のアドバイスに従います。

COM オブジェクトをスコープ付きのシングル スレッド方式で使用している場合は、使用が終わったら、そのオブジェクトで ReleaseComObject を安全に呼び出すことができます。

ただし、アプリケーション内の複数の場所または複数のスレッドから (または同じプロセス内の他のアプリケーションから) COM オブジェクトを使用している場合は、ReleaseComObject を呼び出さないでください。

于 2012-09-26T07:19:32.523 に答える
2

Marshal.ReleaseComObject を使用できます: http://msdn.microsoft.com/de-de/library/system.runtime.interopservices.marshal.releasecomobject.aspx

于 2012-09-26T07:14:50.343 に答える