tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re^2: 【解決】Re^3: レイトバインドするとExcelのFindNextオブジェクトが開放できなくなります
投稿日: 2010/07/15(Thu) 08:10
投稿者camputer
> 何のエラーか書かれていませんが、どのような物ですか?
 魔界の仮面弁士様
おはようございます!!夜遅い時間にも関わらずコメントいただき
どうもありがとうございます。お返事が遅くなり申し訳ございませんm(_ _)m
今確認できる状況でございますゆえ、調査してまいります。
しばしお待ちくださいませ。。。


#==【追記】====================================================

 調べてまいりました。ご推察なさられたとおり、    
myRng = Nothingの時のエラーで間違いなさそうでございます。    
【エラー表示内容】    
    ArgumentNullExceptionはハンドルされませんでした。
    値を Null にすることはできません。 パラメータ名: o
になります。
    
MRComObjectにつきましては、以下になります。最後にobjCom = Nothingしております。    
(この行につきましては殆ど意味が無いのかな?などと考えながらも
       必ずしも無意味では無さそうなので入れてみました。)    

    Public Shared Sub MRComObject(Of T As Class)(ByRef objCom As T, Optional ByVal force As Boolean = False)    
        If objCom Is Nothing Then Return    
        Try    
            If System.Runtime.InteropServices.Marshal.IsComObject(objCom) Then    
                If force Then    
                   System.Runtime.InteropServices.Marshal.FinalReleaseComObject(objCom)    
                Else    
                    Dim count As Integer = System.Runtime.InteropServices.Marshal.ReleaseComObject(objCom)
                    'MsgBox(count)
                    'Debug.WriteLine(count)
                End If
            End If
        Finally
            objCom = Nothing
        End Try
    End Sub

 If force Then 時にFinal〜しておりますが、今回の現象においては上記コードではCom〜が一回も解放できませんでした。
前コメント記載コードのように、毎回Final〜すると現時点で100%解放できております。



 昨日アドバイスいただけてから、すべてのComオブジェクト解放時に「毎回」
FinalReleaseComObjectを使用してしまう、という事はNGなのかな???などと考えております。
毎回、「完璧に」解放してから次に進むべきではないのかな??などと思う次第なのでございますが。。。
例えばMRComObjectを次のようにしてしまうとか(?)。。。

    Public Shared Sub MRComObject(Of T As Class)(ByRef objCom As T, Optional ByVal force As Boolean = False)
        If objCom Is Nothing Then Return
        Try
            If System.Runtime.InteropServices.Marshal.IsComObject(objCom) Then
                System.Runtime.InteropServices.Marshal.FinalReleaseComObject(objCom)
            End If
        Finally
            objCom = Nothing
        End Try
    End Sub

もしくは

    Public Shared Sub MRComObject(Of T As Class)(ByRef objCom As T, Optional ByVal force As Boolean = False)
        If objCom Is Nothing Then Return
        Try
            If System.Runtime.InteropServices.Marshal.IsComObject(objCom) Then
                Do
                    i = System.Runtime.InteropServices.Marshal.ReleaseComObject(objCom)
                Loop Until i <= 0
            End If
        Finally
            objCom = Nothing
        End Try
    End Sub

 自分でもう少し勉強して参ります^^ この度は誠にありがとうございました!!!m(_ _)m

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。