我想我很清楚VB中ByVal
和ByRef
之间的区别是什么,但我的问题是当我尝试将它与一个用{WithEvents
声明的成员结合使用时1}}。
我有以下方法:
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
的调用按预期工作(但显然无法处理事件)
任何人都可以向我解释为什么会这样吗?
P.S。我找到了类似的question elsewhere,但解决方法在我的方案中不起作用。
答案 0 :(得分:0)
也许打电话:
Set Connection = Nothing
SafeCloseAndDeRefConnection(Connection)
之后
这会强制破坏对象而不依赖VB6来为你做这件事!