2013-07-26 2 views
1

Vous avez essayé d'adapter un lecteur de carte de VB6 à vb.net. Je reçois cette erreur après la conversion:Erreur de délégation de conversion de VB6 à vb.net

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

Voici le code que je utilise:

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 

Pour autant que je sais que je dois faire quelque chose avec les délégués, mais je ne suis pas sûr pour le faire.

Répondre

0

Vous devez déclarer un délégué, comme ceci:

Delegate Sub DeviceStateChangedDelegate(ByVal param As Integer) 

ensuite à l'intérieur de la méthode SetupCallBacks vous devez créer et appeler votre délégué, comme ceci:

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

Merci pour la réponse, et cela a corrigé ce problème, mais mon esprit interne humble n'a pas réalisé que l'utilisation de cette méthode pour lire le HID nécessite un fichier .dll qui ne sera pas utilisé dans la fonction à laquelle il va appartenir ... – user2620509

+0

@ user2620509 Est 'MTUSCRACardDataStateChangedNotify' dans une DLL externe? C'est à dire. est-il défini par une déclaration 'Declare'? Dans ce cas, je ne pense pas que cette réponse s'applique. – MarkJ