タイトル : Re^2: EXCELへの印字部分処理に関して 投稿日 : 2007/09/28(Fri) 22:18 投稿者 : 魔界の仮面弁士
> > MRComObject(intCellObjRow) > > MRComObject(intCellObjCol) > これは、解放する必要がないのでは。(単なるLong型の変数なので) ん? Integer型ですよね? (^^; ところで。 ここのサイトで紹介されている MRComObject メソッドに、少し手を加えてみました。 これなら、 MRComObject(xlsRange) はコンパイルが通りますが、今回のような MRComObject(intCellObjRow) はコンパイルエラーになってくれるので、間違いを見つけやすくなります。 また、元のコードは、引数が ByRef Object だったために、Option Strict On の時に 呼び出しにくかったのですが、このコードではその点も改善されています。 'VB2005/2008 用 ''' <summary> ''' COMオブジェクトの参照カウントをデクリメントします。 ''' </summary> ''' <typeparam name="T">(省略可能)</typeparam> ''' <param name="objCom"> ''' COM オブジェクト持った変数を指定します。 ''' このメソッドの呼出し後、この引数の内容は Nothing となります。 ''' </param> ''' <param name="force"> ''' すべての参照を強制解放する場合はTrue、現在の参照のみを減ずる場合はFalse。 ''' </param> Public Shared Sub MRComObject(Of T As Class)(ByRef objCom As T, Optional ByVal force As Boolean = False) If objCom Is Nothing Then Return End If Try If System.Runtime.InteropServices.Marshal.IsComObject(objCom) Then If force Then System.Runtime.InteropServices.Marshal.FinalReleaseComObject(objCom) Else System.Runtime.InteropServices.Marshal.ReleaseComObject(objCom) End If End If Finally objCom = Nothing End Try End Sub |