gpt4 book ai didi

vb6 - 为什么 ByRef 不能与 WithEvents 结合使用?

转载 作者:行者123 更新时间:2023-12-03 17:52:30 25 4
gpt4 key购买 nike

我想我很清楚 ByVal 之间有什么区别和 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按预期工作(但显然无法处理事件)

谁能向我解释为什么会这样?

附言我找到了一个类似的 question elsewhere ,但解决方法在我的场景中不起作用。

最佳答案

也许打电话:

Set Connection = Nothing

之后 SafeCloseAndDeRefConnection(Connection)
这将强制销毁对象,而不是依靠 VB6 为您完成!

关于vb6 - 为什么 ByRef 不能与 WithEvents 结合使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17468597/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com