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秒