ナレッジベース KB0203

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)
    

シェア

think-cell は、本サイトの機能、パフォーマンス、セキュリティを強化するためクッキーを使用します。本ウェブサイトのすべての機能をお使いいただくには、お客様の同意が必要となります。think-cell によるクッキーの使用およびお客様のプライバシー権に関する詳細は、当社のプライバシーポリシーでご確認いただけます。