I am using easyHID sofware to generate a Visual basic code 6.0. I have the visual basic .net installed. So when i copy the file from vb.6 to vb.net , Vb.net upgrades the file to the .net configuration.Except for one thing that gave me an error:it's the upgrade warning about adding a delegate.
Public Function ConnectToHID(ByVal pHostWin As Integer) As Boolean
FWinHandle = pHostWin
ConnectToHID = hidConnect(FWinHandle)
'UPGRADE_WARNING: Add a delegate for AddressOf WinProc Click for more: 'ms-help://MS.VSCC.2003/commoner/redir/redirect.htm?keyword="vbup1048"'
FPrevWinProc = SetWindowLong(FWinHandle, GWL_WNDPROC, AddressOf WinProc)
End Function
I couldn't figure out how to fix it, Any idea?? here is what the help menu suggested :
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
Thank you in advance



No way for me! I will be using .com (VB5 & 6) for life. There will always be backwards compatibility for .com, no matter what. Out of interest, even the latest versions of MS Office still use .com Microsoft will never completely abandon .com, willing to bet my life on it.


Bookmarks