VB.NETでExcelを起動すると、Excel.exeが落ちない。
参照カウントを全てデクリメントしないと落ちないらしい。
以下のソースの様にすると落ちるようになる。
public sub test() 'Excelアプリケーションの生成 Dim xlApp As New Excel.Application Dim xlBooks As Excel.Workbooks = xlApp.Workbooks Dim xlFilePath As String = Path.GetFullPath(pclsXmlSet.pXmlIni.pstrExcelPath & strTemplate) 'Excelのワークブック作成 Dim xlBook As Excel.Workbook = xlBooks.Add(xlFilePath) 'xlBook = xlBooks.Add(xlFilePath) Me.subSetData(xlBook) 'Excelの表示 xlApp.Visible = True subExcelRelease(xlApp) MRComObject(CObj(xlBooks)) MRComObject(CObj(xlApp)) xlApp = Nothing 'xlApp.Quit() End Sub Private Sub subExcelRelease(ByRef xlApp As Excel.Application) 'AddHandler xlApp.WorkbookBeforeClose, AddressOf subWKClose Dim xlBooks As Excel.Workbooks = xlApp.Workbooks Dim xlSheets As Excel.Sheets For intBooks As Integer = 1 To xlBooks.Count xlSheets = xlBooks(intBooks).Worksheets For intSheets As Integer = 1 To xlSheets.Count MRComObject(CObj(xlSheets(intSheets))) Next MRComObject(CObj(xlSheets)) MRComObject(CObj(xlBooks(intBooks))) Next MRComObject(CObj(xlBooks)) MRComObject(CObj(xlApp)) End Sub Private Sub MRComObject(ByRef objCom As Object) 'COM オブジェクトの使用後、明示的に COM オブジェクトへの参照を解放する Try '提供されたランタイム呼び出し可能ラッパーの参照カウントをデクリメントします If Not objCom Is Nothing AndAlso System.Runtime.InteropServices. _ Marshal.IsComObject(objCom) Then Dim I As Integer Do I = System.Runtime.InteropServices.Marshal.ReleaseComObject(objCom) Loop Until I <= 0 End If Catch Finally '参照を解除する objCom = Nothing End Try End Sub
[カテゴリ: プログラミング言語 > VisualStudio]
[通知用URL]
Tweet
最終更新時間:2008年05月25日 22時56分47秒