2013-07-26 3 views
1

Попытка адаптировать устройство для чтения карт с VB6 на vb.net. Я получаю эту ошибку после преобразования:Ошибка конвертации делегата с VB6 на vb.net

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

Вот код, я использую:

Public Sub SetupCallBacks() 
    'UPGRADE_WARNING: Add a delegate for AddressOf OnEventDeviceStateChanged Click for more: 'ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?keyword="E9E157F7-EF0C-4016-87B7-7D7FBBC6EE08"' 
    Call MTUSCRADeviceStateChangedNotify(AddressOf OnEventDeviceStateChanged) 
    'UPGRADE_WARNING: Add a delegate for AddressOf OnEventCardDataStateChanged Click for more: 'ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?keyword="E9E157F7-EF0C-4016-87B7-7D7FBBC6EE08"' 
    Call MTUSCRACardDataStateChangedNotify(AddressOf OnEventCardDataStateChanged) 
End Sub 


Public Sub OnEventDeviceStateChanged(ByVal parm As Integer) 
    If (gbEvents) Then 
     If (glDeviceState <> parm) Then 
      glDeviceState = parm 
     End If 

     Select Case glDeviceState 
      Case MTSCRA_STATE_DISCONNECTED 
       SetStatus(("OnEventDeviceStateChanged:Disconnected")) 
      Case MTSCRA_STATE_CONNECTED 
       SetStatus(("OnEventDeviceStateChanged:Connected")) 
      Case MTSCRA_STATE_ERROR 
       SetStatus(("OnEventDeviceStateChanged:Error")) 
     End Select 
    End If 
End Sub 

Насколько я знаю, что нужно сделать что-то с делегатами, но я не знаю, как сделать это.

ответ

0

Вы должны объявить делегат, как это:

Delegate Sub DeviceStateChangedDelegate(ByVal param As Integer) 

Тогда внутри SetupCallBacks метода необходимо создать и вызвать ваш делегат, как это:

Public Sub SetupCallBacks() 
    ' Declare and instantiate the delegate 
    Dim MTUSCRADeviceStateChangedNotify As DeviceStateChangedDelegate 
    MTUSCRADeviceStateChangedNotify = AddressOf OnEventDeviceStateChanged 

    ' Invoke the delegate, passing it 10, which is obviously made up 
    MTUSCRADeviceStateChangedNotify.Invoke(10) 
End Sub 
+0

Спасибо за ответ, и это устранило эту проблему, но мой скромный опыт интернетов не понял, что использование этого метода для чтения HID требует файла DLL, который не будет использоваться в функции, к которой он будет принадлежать ... – user2620509

+0

@ user2620509 Is 'MTUSCRACardDataStateChangedNotify' во внешней DLL? То есть определяется ли это выражением 'Declare'? В этом случае я не думаю, что этот ответ применим. – MarkJ

Смежные вопросы