Previous | Index | Next 

[INFO] The AutoDispose pragma doesn’t account for multiple assignments to same variable

You can use the AutoDispose pragma to automatically generate the code that correctly invoke the Dispose method of an IDisposable object when the object variable is set to Nothing or goes out of scope. However, the AutoDispose pragma assumes that the variable is never reused to reference another object. Consider the following scenario:

    Dim rs As New Recordset
    ' use the ‘rs’ object
    ' ...
    ' assign a new instance to ‘rs’  
    Set rs = New Recorset
    ' ...
    ' clear the ‘rs’  object
    Set rs = Nothing

The AutoDispose pragma forces VB Migration Partner to generate the following code:

    Dim rs As New Recordset
    ' use the Recordset object
    ' ...
    ' assign a new Recordset instance to 'rs'
    Set rs = New Recorset
    ' ...
    ' clear the second Recordset object
    SetNothing6(rs)

It is quite evident that the above code correctly disposes of the second Recordset instance but not the first one. It is therefore necessary to manually insert either a Set rs = Nothing statement in the original VB6 code or a SetNothing6(rs) statement in the migrated code. In the latter case you can use an InsertStatement pragma:

    Dim rs As New Recordset
    ' use the Recordset object
    ' ...
    ' assign a new Recordset instance to 'rs'
    '## InsertStatement SetNothing6(rs)
    Set rs = New Recorset
    ' ...
    ' clear the second Recordset object
    SetNothing6(rs)

 

Previous | Index | Next