我想我很清楚VBByVal
和ByRef
VB 之间的区别是什么,但我的问题是当我尝试将它与声明为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
按预期工作(但显然事件不能被处理)
谁能向我解释为什么会这样?
PS我在其他地方发现了一个类似的问题,但解决方法在我的场景中不起作用。