Lettura tessere sanitarie con VBA e Winscard

di il
6 risposte

Lettura tessere sanitarie con VBA e Winscard

Ciao a tutti,
ho inserito in un mio programma la possibilità di leggere i dati anagrafici dei pazienti da tessere sanitarie e carte di identità elettroniche.
Il programma funziona, ma se per caso, una tessera viene inserita male, o non è leggibile, la lettura corrente non va a buon fine, ma nemmeno tutte le successive. Pensare, con la fila di persone davanti di dover riavviare il pc o mettersi a togliere e ricollegare il lettore dal pc, per loro non è pensabile.
Le istruzioni di apertura delle comunicazione sono queste:
Dim hContext As Long
Dim hCard As Long
Dim retval As Long
Dim Scope As Long
Dim readers As String * 256
Dim groups As String * 256
Dim activeprotocol As Long
Dim readerlen As Long
Dim scard_protocol_t0_or_t1 As Long
Dim SCARD_SHARE_SHARED As Long
Dim recvlen As Long
Dim bytArray(256) As Byte
Dim recvbuff(256) As Byte
Dim Smem As Integer
Dim i As Integer
Dim chaine_hexa As String
Dim scad_leave_card As Long
Dim strHexa As String
Dim risposta As String
Dim k As Integer
Dim LenEmettitore As Long
Dim Emettitore As String
Dim LenRilascio As Integer
Dim Rilascio As String
Dim LenScadenza As Integer
Dim Scadenza As String
Dim LenCognome As Integer
Dim COGNOME As String
Dim LenNome As Integer
Dim NOME As String
Dim LenValore1 As Integer
Dim LenValore2 As Integer
Dim LenValore3 As Integer
Dim LenCodice As Integer
Dim CODICE As String


scard_protocol_t0_or_t1 = 0
SCARD_SHARE_SHARED = 3
readerlen = 256
recvlen = 255
strHexa = ""

retval = SCardEstablishContext(Scope, 0, 0, hContext)
If retval <> 0 Then
MsgBox "erreur SCardEstablishContext n." & CStr(retval)
GoTo ChiudiConnessione
Exit Function
End If

retval = SCardListReaders(hContext, groups, readers, readerlen)
If retval <> 0 Then
MsgBox "erreur SCardListReaders n. " & CStr(retval)
GoTo ChiudiConnessione
Exit Function
End If

retval = SCardConnect(hContext, readers, SCARD_SHARE_SHARED, scard_protocol_t0_or_t1, hCard, activeprotocol)
If retval <> 0 Then
retval = SCardReconnect(hCard, SCARD_SHARE_SHARED, scard_protocol_t0_or_t1, 0, activeprotocol)
MsgBox "erreur SCardConnect n. " & CStr(retval)
GoTo ChiudiConnessione
Exit Function
End If

retval = SCardStatus(hCard, readers, readerlen, 1, scard_protocol_t0_or_t1, recvbuff(0), recvlen)
If retval <> 0 Then
MsgBox "Erreur SCardStatus n. " & CStr(retval)
GoTo ChiudiConnessione
Exit Function
End If

In genere l'errore ce l'ho sulla funzione sCardConnect. In caso di errori si salta a ChiudiConnessione:

' ############################################################################
' CHIUDO LA CONNESSIONE CON LA CARTA

retval = SCardDisconnect(hCard, 0)
If (retval <> 0) Then MsgBox ("Errore: " & CStr(retval))

retval = SCardReleaseContext(hContext)
If (retval <> 0) Then MsgBox ("Errore: " & CStr(retval))

ReadTesseraSanitaria = risposta

End Function


Quindi, in teoria tutto a posto, ma dopo un eventuale errore di connessione, quando inserisco una tessera, non lampeggia la luce che rileva la tessera, ma rimane fissa come se non leggesse nulla.
Qualcuno è in grado di aiutarmi?

Grazie

6 Risposte

Devi accedere o registrarti per scrivere nel forum
6 risposte