5

ByValとVBの違いはかなりよくわかっていると思います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は期待どおりに機能します (ただし、明らかにイベントは処理できません)

なぜこれが起こっているのか誰にも説明できますか?

PS他の場所でも同様の質問を見つけましたが、私のシナリオでは回避策が機能しません。

4

1 に答える 1