ナレッジベース KB0203
マネージ コードからOffice Automationを使用する方法(C#、Visual Basic、.NET)
問題
OfficeではCOMを使用してオートメーション オブジェクトを公開しています。C#およびVisual Basicで使用されているように、マネージ コードでCOMオブジェクトはランタイム呼び出し可能ラッパー (RCW) でラップされます。プログラムによる特別なアクションがない場合、RCWでラップされているCOMオブジェクトはガベージコレクションでのみリリースされます。メモリ負荷がない場合はリリースされません。
解決策
決定論的にCOMオブジェクトをリリースするには、System.Runtime.InteropServices.Marshal.ReleaseComObjectを使用後に添付してOfficeから受け取ったオブジェクトをすべてリリースしてください。
注記
-
System.Runtime.InteropServices.Marshal.FinalReleaseComObjectは使用しないでください。他の管理対象アドインがまだ使用している場合でもCOMオブジェクトをリリースするためです。
-
以下のような別の手段でオブジェクトにアクセスしないでください。
// C# // Wrong PowerPoint.View view = Application.ActiveWindow.View;
' Visual Basic ' Wrong Dim view As PowerPoint.View = Application.ActiveWindow.View
この場合、ActiveWindowによって一時的なPowerPoint.DocumentWindowが作成されますが、これはリリースされません。
その代り、変数に割り当ててリリースします。
// C# PowerPoint.DocumentWindow wnd = Application.ActiveWindow; PowerPoint.View view = wnd.View; System.Runtime.InteropServices.Marshal.ReleaseComObject(wnd); System.Runtime.InteropServices.Marshal.ReleaseComObject(view);
' Visual Basic Dim wnd As PowerPoint.DocumentWindow = Application.ActiveWindow Dim view As PowerPoint.View = wnd.View System.Runtime.InteropServices.Marshal.ReleaseComObject(wnd) System.Runtime.InteropServices.Marshal.ReleaseComObject(view)