我想我很清楚VB中ByVal
和ByRef
之间的区别,但我的问题是当我尝试将它与用WithEvents
声明的成员一起使用时。
我有以下方法:
Private Sub SafeCloseAndDeRefConnection(ByRef cnx As ADODB.Connection)
On Error GoTo ErrH
If Not cnx Is Nothing Then
If (cnx.State And adStateConnecting) = adStateConnecting Then
cnx.Cancel
End If
If (cnx.State And adStateOpen) = adStateOpen Then
cnx.Close
End If
Set cnx = Nothing
End If
Exit Sub
ErrH:
Set cnx = Nothing
End Sub
如果我有一个类成员被声明为:
Private WithEvents Connection As ADODB.Connection
然后我想关闭连接,然后这样称呼它:
SafeCloseAndDeRefConnection Connection
但是在调用SafeCloseAndDeRefConnection
之后,Connection
变量被而不是设置为Nothing
,并且仍然具有其原始引用。
如果我删除WithEvents
关键字,对SafeCloseAndDeRefConnection
的调用将按预期工作(但显然无法处理事件)
有人能向我解释为什么会发生这种事吗?
附言:我在其他地方也发现了类似的问题,但变通方法在我的场景中不起作用。
也许调用:
Set Connection = Nothing
SafeCloseAndDeRefConnection(Connection)
之后
这将强制销毁对象,而不依赖VB6为您做这件事!