Auch wenn es nicht mehr unbedingt zwingend notwendig ist, COM-Objekte explizit freizugeben, ist dies im Kontext mancher COM-Umgebungen (z.B. Outlook-AddIns) durchaus ratsam.
Die Freigabe über die statische Methode ReleaseComObject der Marshal-Klasse in den InteropServices ist jedoch ein wenig umständlich. Meistens muss erst noch geprüft werden, ob eine Referenz überhaupt noch gültig ist, Zudem kann eine Prüfung, ob es sich tatsächlich um ein COM-Objekt handelt, auch nicht schaden. Und meistens muss abschließend auch noch die Referenzvariable selbst freigegeben werden.
Das alles lässt sich mit einer Erweiterungsmethode für den Object-Typ in einem Rutsch erledigen.
<Extension()> _
Public Function ReleaseComObject(ByRef thisObject As Object) As Integer
Dim nRefCounter As Integer = -1
If thisObject IsNot Nothing Then
If System.Runtime.InteropServices.Marshal.IsComObject(thisObject) Then
nRefCounter = System.Runtime.InteropServices.Marshal.ReleaseComObject(thisObject)
End If
End If
thisObject = Nothing
Return nRefCounter
End Function
Kommentare zum Snippet