" addressof " VB6 to VB.NET

address-operator, callback, vb.net, vb6

Solution

You are probably seeing this error:

'AddressOf' expression cannot be converted to 'Long' because 'Long' is not a delegate type.

What you probably want to do is create a delegate then change the type of adab to that delegate type. Add this to the class:

Public Delegate Sub ReadDataCallBackDelegate(ByVal nPort As Long, _
  ByVal pPacketBuffer As Byte, ByVal nPacketSize As Long)

Then change your P/Invoke declaration to:

Declare Function MP4_ClientStart Lib "hikclient.dll" (ByVal pClientinfo As _
  CLIENT_VIDEOINFO, ByVal abab As ReadDataCallBackDelegate) As Long

Do not delete/change your ReadDataCallBack Sub, you still need that.

At that point he compiler should be happy. However, the point made by others is important. The length of Integers and Longs is different in VB6 than in VB.NET. So in .NET you need to use Integer anytime you used a Long in VB6.

Problem

I´m having some problem to convert my VB6 project to VB.NET I don't understand how this "AddressOf" function should be in VB.NET My VB6 code: ``` Declare Function MP4_ClientStart Lib "hikclient.dll" _ (pClientinfo As CLIENT_VIDEOINFO, ByVal abab As Long) As Long Public Sub ReadDataCallBack(ByVal nPort As Long, pPacketBuffer As Byte, _ ByVal nPacketSize As Long) If Not bSaved_DVS Then bSaved_DVS = True HW_OpenStream hChannelHandle, pPacketBuffer, nPacketSize End If HW_InputData hChannelHandle, pPacketBuffer, nPacketSize End Sub nn1 = MP4_ClientStart(clientinfo, AddressOf ReadDataCallBack) ```

Original source