为什么ByRef不能与WithEvents一起使用?

时间:2013-07-04 11:01:20

标签: vb6 byref

我想我很清楚VB中ByValByRef之间的区别是什么,但我的问题是当我尝试将它与一个用{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,但解决方法在我的方案中不起作用。

1 个答案:

答案 0 :(得分:0)

也许打电话:

Set Connection = Nothing

SafeCloseAndDeRefConnection(Connection)之后

这会强制破坏对象而不依赖VB6来为你做这件事!