Buon giorno a tutti, devo includere la gestione delle smart card nel mio progetto ma sono completamente ignorante sulla cosa. Ho tutto quello che mi serve: Lettore GemPC410, card di prova, un manuale sulla programmazione delle smart card di ugo chirico e il software per programmarci sopra scritto sempre da ugo chirico. Nel mio progetto avrei bisogno di leggere/scrivere le informazioni sulla card ma non saprei da dove partire. Esempio: ho intercettato l'evento click di un button e volevo farmi ritornare le informazioni della card da visualizzare in una AfxMessageBox....il problema è che ho iniziato a scrivere del codice ma non so effettivamente quando giusto sia. Non c'è nessuno che ha fatto delle cose simili? o per lo meno ha del codice, dei link, qualcosa da potermi indicare per avere un riferimento?Al momento mi sto arrampicando sugli specchi

Vi posto quello che ho provato a scrivere ma premetto che sarà tutto sbagliato e comunque non è completo....
codice:
	//Mi restituisce l'handle alla sessione aperta
	SCARDCONTEXT hContext;
	long nRes;
	nRes = SCardEstablishContext(SCARD_SCOPE_USER, NULL, NULL, &hContext);
	if(nRes != SCARD_S_SUCCESS)
		return; 
	//Apro la connessione con la SmartCard
	SCARDHANDLE hCard;
	LPCTSTR		lpszReaderName		= _T("Ugo's Virtual Smart Card Reader");
	DWORD		dwSharedMode		= SCARD_SHARE_SHARED;
        DWORD		dwPreferredProtocol     = SCARD_PROTOCOL_T0 | SCARD_PROTOCOL_T1;
	DWORD		dwActiveProtocol	= SCARD_PROTOCOL_T1;

	nRes = SCardConnect(
							hContext,
							lpszReaderName,
							dwSharedMode,
							dwPreferredProtocol,
							&hCard,
							&dwActiveProtocol
						);
	
	if(nRes != SCARD_S_SUCCESS)
		return;

	typedef struct APDU 
	{
		BYTE cla;		//classe
		BYTE ins;		//istruzione
		BYTE p1;		//P1
		BYTE p2;		//P2
		BYTE lc;		//lunghezza del campo data
		BYTE data[256];	//Dati
		BYTE le;		//lunghezza del response
	}APDU;
	//Lunghezza dei dati da inviare
	DWORD dwSendLength;	
	//Buffer contenente l'APDU
	BYTE  pbtAPDU[262];
	//Lunghezza del campo response
	DWORD dwRecvLength;
	//Buffer contenente il campo response
	BYTE btRecvBuffer[256];

	APDU* apdu;
	apdu = new APDU;

	apdu->cla = 0x00;
	apdu->ins = 0xCA;
	apdu->p1  = 0x00;
	apdu->p2  = 0x81;
	apdu->lc  = 0x00;
	apdu->le  = 0x00;

	pbtAPDU[0] = apdu->cla;
	pbtAPDU[1] = apdu->ins;
	pbtAPDU[2] = apdu->p1;
	pbtAPDU[3] = apdu->p2;
	pbtAPDU[4] = apdu->lc;
mi sono fermata qui....Aiuto per favore Grazie