Per un cliente sto facendo manutenzione ad un vecchio software sviluppato in VB6. Questo software deve colloquiare con un lettore di Smartcard tramite una DLL C++.
Sono riuscito a far funzionare tutto, tranne una funzione della DLL stessa che presenta sia in input che in output delle strutture dati che non riesco a replicare; infatti il programma crasha dando una exception c0000005 (che è l'accesso negato alla ram) quando passo i parametri alla funzione.
I dati che devo tradurre da C++ a VB6 sono così strutturati:
Struttura dati per invio comando al device:
typedef struct {
BYTE bCommandCode;
BYTE bParameterCode;
struct {
DWORD dwSize;
LPBYTE lpbBody;
}
Data;
}
COMMAND, *LPCOMMAND;
----------------------
Struttura dati per ritorno esito del comando dal device:
typedef enum {
PositiveReply,
NegativeReply,
ReplyReceivingFailure,
CommandCancellation,
ReplyTimeout,
}
REPLY_TYPE, *LPREPLY_TYPE;
typedef struct {
BYTE bCommandCode;
BYTE bParameterCode;
struct {
BYTE bSt1;
BYTE bSt0;
}
StatusCode;
struct {
DWORD dwSize;
BYTE bBody[ MAX_DATA_ARRAY_SIZE];
}
Data;
}
POSITIVE_REPLY, *LPPOSITIVE_REPLY;
typedef struct {
BYTE bCommandCode;
BYTE bParameterCode;
struct {
BYTE bE1;
BYTE bE0;
}
ErrorCode;
struct {
DWORD dwSize;
BYTE bBody[ MAX_DATA_ARRAY_SIZE];
}
Data;
}
NEGATIVE_REPLY, *LPNEGATIVE_REPLY;
typedef struct {
REPLY_TYPE replyType;
union {
POSITIVE_REPLY positiveReply;
NEGATIVE_REPLY negativeReply;
}
message;
}
REPLY, *LPREPLY;
----------------------
Le ho provate tutte, ma non riesco a rigenerare la stessa struttura dati che la DLL necessita, sia per il comando che per la risposta. Se qualcuno sa come tradurre queste informazioni gliene sarei eternamente grato. Un saluto a tutti...