This documentation is archived and is not being maintained.

Add a delegate for AddressOf operator

Visual Studio .NET 2003

In Visual Basic 6.0, the AddressOf operator was used to pass the address in memory of a function to an API procedure that takes a function pointer as an argument.

In Visual Basic .NET, the AddressOf operator must be used with a Delegate type. Delegates allow Visual Basic .NET to maintain a pointer to a function even if the function itself has already been garbage-collected.

The following example illustrates how a callback function that uses AddressOf is upgraded:

' Visual Basic 6.0
Declare Function SetWindowLong Lib "USER32.DLL" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal attr As Long, ByVal lVal As Long) As Long
Sub SubClassWindow(ByVal hwnd As Long)
   If PrevProcPtr = 0 Then
      PrevProcPtr = SetWindowLong(hwnd, GWL_WNDPROC, AddressOf SubClassProc)
   End If
End Sub

' After upgrade to Visual Basic .NET
Declare Function SetWindowLong Lib "USER32.DLL"  Alias "SetWindowLongA"(ByVal hwnd As Integer, ByVal attr As Integer, ByVal lVal As Integer) As Integer
Sub SubClassWindow(ByVal hwnd As Integer)
   If PrevProcPtr = 0 Then
      ' UPGRADE_WARNING: Add a delegate for AddressOf SubClassProc.
      PrevProcPtr = SetWindowLong(hwnd, GWL_WNDPROC, AddressOf SubClassProc)
   End If
End Sub

What to do next

  • Add a delegate for the AddressOf operator, and change the parameter of the function declaration to the Delegate type:
    Delegate Function SubClassProcDelegate(ByVal hwnd As Integer, ByVal msg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer
    Declare Function SetWindowLong Lib "USER32.DLL" Alias "SetWindowLongA" (ByVal hwnd As Integer, ByVal attr As Integer, ByVal lVal As SubClassProcDelegate) As Integer
    Sub SubClassWindow(ByVal hwnd As Integer)
       If PrevProcPtr = 0 Then
          PrevProcPtr = SetWindowLong(hwnd, GWL_WNDPROC, AddressOf SubClassProc)
       End If
    End Sub
    

See Also

Delegates and the AddressOf Operator | AddressOf Operator | Delegate Statement

Show: