微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我想我很清楚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的调用按预期工作(但显然不能处理事件)

任何人都可以向我解释为什么会这样吗?

附:我找到了类似的question elsewhere,但解决方法在我的方案中不起作用.

解决方法

也许打电话:

Set Connection = nothing

SafeCloseAndDeRefConnection(连接)之后

这将强制破坏对象,而不是依靠VB6为你做!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐