Code "C" en Visual Basic

c_charly Messages postés 21 Date d'inscription lundi 27 juin 2005 Statut Membre Dernière intervention 8 septembre 2005 - 30 juin 2005 à 14:48
c_charly Messages postés 21 Date d'inscription lundi 27 juin 2005 Statut Membre Dernière intervention 8 septembre 2005 - 30 juin 2005 à 16:38
Bonjour j'ai un code en C et j'ai besoin de le retranscrire en Visula Basic: malheureusement mes connaissances en Visual sont tres faibles alors je sollicite l'aide de qq1 qui s'y connaitrai Merci
Voici le code source:

#ifndef _GSC_DEF_H
#define _GSC_DEF_H


#include "WinScard.h"


// *********************************************************************
// Parameters value section
// *********************************************************************
// the value 0x00 is RFU in this section


// For bCardType
#define ICC_2_WIRE 0x01
#define ICC_3_WIRE 0x02
#define ICC_SDA 0x03
#define ICC_4402 0x04
#define ICC_4403 0x05
#define ICC_4433 0x06
#define ICC_4404 0x07
#define ICC_896 0x08


// For bSubCardType
#define ADDR_1_BYTE 0x01
#define ADDR_2_BYTES 0x02
#define ADDR_3_BYTES 0x03
#define PAGE_8_BYTES 0x04
#define PAGE_16_BYTES 0x05
#define PAGE_32_BYTES 0x06
#define PAGE_64_BYTES 0x07
#define PAGE_128_BYTES 0x08
#define NO_SUB_CARD_TYPE 0x09


// *********************************************************************
//// Error code section
// *********************************************************************


#define GEM_SUCCESS 0x00000000


#define GEM_E_INVALID_HANDLE 0x00000001
#define GEM_E_NO_SERVICE 0x00000002
#define GEM_E_INVALID_PARAMETERS 0x00000003


#define GEM_E_NO_READERS_AVAILABLE 0x00000004
#define GEM_E_NO_SMARTCARD 0x00000005
#define GEM_E_CARD_UNSUPPORTED 0x00000006


#define GEM_E_UNKNOWN_CARD 0x00000007



#define GEM_E_INSUFFICIENT_BUFFER 0x00000008
#define GEM_E_PROTOCOL_NOT_SUPPORTED 0x00000009
#define GEM_E_WRITE_ERROR 0x0000000A
#define GEM_E_INVALID_ADDRESS 0x0000000B
#define GEM_E_INVALID_LENGTH 0x0000000C



#define GEM_E_NO_ACCESS 0x0000000D
#define GEM_E_WRONG_PWD 0x0000000E


#define GEM_E_UNKNOWN_ERROR 0x0000000F
#define GEM_E_INVALID_FIRMWARE_ANSWER 0x00000010
#define GEM_E_EARLY_END_OF_FILE 0x00000011



// *********************************************************************
//// DLL Header section
// *********************************************************************



#ifdef __cplusplus
extern "C" {
#endif


long GCSInit(IN SCARDHANDLE hCard);


long GCSClose(IN SCARDHANDLE hCard);


long GSCPowerUp ( IN SCARDHANDLE hCard,
IN OUT LPBYTE pbRecvBuffer,
IN OUT LPDWORD pcbRecvLength);


long GSCPowerDown(IN SCARDHANDLE hCard);


long GSCWrite ( IN SCARDHANDLE hCard,
IN BYTE bCardType,
IN BYTE bSubCardType,
IN DWORD dwAddressToWrite,
IN LPBYTE pbByteToWrite,
IN DWORD dwLengthToWrite);


long GSCWriteProtectionBits ( IN SCARDHANDLE hCard,
IN BYTE bCardType,
IN BYTE bSubCardType,
IN DWORD dwAddressToWrite,
IN LPBYTE pbByteToWrite,
IN DWORD dwLengthToWrite);


long GSCWriteSecurityMemory ( IN SCARDHANDLE hCard,
IN BYTE bCardType,
IN BYTE bSubCardType,
IN DWORD dwAddressToWrite,
IN LPBYTE pbByteToWrite,
IN DWORD dwLengthToWrite);


long GSCRead ( IN SCARDHANDLE hCard,
IN BYTE bCardType,
IN BYTE bSubCardType,
IN DWORD dwAddressToRead,
IN DWORD dwLengthToRead,
OUT LPBYTE pbRecvBuffer,
IN OUT LPDWORD pdRecvBufferLength);


long GSCReadProtectionBits ( IN SCARDHANDLE hCard,
IN BYTE bCardType,
IN BYTE bSubCardType,
IN DWORD dwAddressToRead,
IN DWORD dwLengthToRead,
OUT LPBYTE pbRecvBuffer,
IN OUT LPDWORD pdRecvBufferLength);


long GSCReadSecurityMemory ( IN SCARDHANDLE hCard,
IN BYTE bCardType,
IN BYTE bSubCardType,
IN DWORD dwAddressToRead,
IN DWORD dwLengthToRead,
OUT LPBYTE pbRecvBuffer,
IN OUT LPDWORD pdRecvBufferLength);


long GSCVerify ( IN SCARDHANDLE hCard,
IN BYTE bCardType,
IN DWORD dwCodeLength,
IN LPBYTE pbCodeToVerify);


long GSCErase ( IN SCARDHANDLE hCard,
IN BYTE bCardType,
IN BYTE bSubCardType,
IN DWORD dwAddressToErase,
IN DWORD dwLengthToErase);



#ifdef __cplusplus
}
#endif



#endif //_GSC_DEF_H
// END OF FILE.

6 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
30 juin 2005 à 15:06
Heu... là il s'agit uniquement du .h, donc il n'y a aucun code
réellement intéressant à faire en VB, c'est le .c le principal
programme !


Déjà, tout les #define ICC_2_WIRE 0x01

Tu peux les remplacer par : Const ICC_2_WIRE = &H01


DarK Sidious

Un API Viewer (pour le VB, VB.NET, C, C# et Delphi) : www.ProgOtoP.com/popapi/
0
c_charly Messages postés 21 Date d'inscription lundi 27 juin 2005 Statut Membre Dernière intervention 8 septembre 2005
30 juin 2005 à 15:19
Je c mais je voulais deja commencer par la car le prog est long ..... en voila la preuve:


DWORD lRet;


DWORD m_Ret;


SCARDCONTEXT m_hContext;


SCARDHANDLE m_hCard;


Cstring m_csSATR;


***********************************************************************************


void TestInit()


***********************************************************************************


{


if(m_hContext)


{


if(m_hCard)


lRet = SCardDisconnect(m_hCard, SCARD_UNPOWER_CARD);


lRet = SCardReleaseContext(m_hContext);


m_hContext = NULL;


m_hCard = NULL;


}


lRet = SCardEstablishContext (SCARD_SCOPE_SYSTEM, NULL, NULL, &m_hContext);


if (lRet ! = SCARD_S_SUCCESS)


{


// Display ("Error! No RM context!");


m_Ret = GEM_E_NO_SERVICE;


return;


}


// Get size of reader list


DWORD dwReadersLength = 0;


LPSTR szListReaders = NULL;


LPTSTR szSCReader = NULL;


lRet = SCardListReaders(m_hContext, NULL, NULL, &dwReadersLength);


if (lRet != SCARD_S_SUCCESS)


{


// Display ("No readers present!");


lRet = SCardReleaseContext(m_hContext);


m_Ret = GEM_E_NO_READERS_AVAILABLE;


return;


}


szListReaders = (char*)malloc(dwReadersLength);


lRet = SCardListReaders (m_hContext, NULL, (LPTSTR)szListReaders, &dwReadersLength);


if (lRet ! = SCARD_S_SUCCESS)


{


if(szListReaders) free(szListReaders);


lRet = SCardReleaseContext(m_hContext);


// Display ("No readers present!");


m_Ret = GEM_E_NO_READERS_AVAILABLE;


return;


}


szSCReader = (LPTSTR)szListReaders;


if(!szSCReader || *(szSCReader) == '\0')


{


if(szListReaders) free(szListReaders);


lRet = SCardReleaseContext(m_hContext);


// Display ("No readers present!");


m_Ret = GEM_E_NO_READERS_AVAILABLE;


return;


}


// Connect to the card :


DWORD dwShareMode = SCARD_SHARE_DIRECT;


DWORD dwPreferedProtocol = SCARD_PROTOCOL_UNDEFINED;


DWORD dwProtocol;


lRet = SCardConnect (m_hContext, (LPCTSTR)szSCReader, dwShareMode,


dwPreferedProtocol, &m_hCard, &dwProtocol);


if (lRet ! = SCARD_S_SUCCESS)


{


lRet = SCardReleaseContext(m_hContext);


if(szListReaders) free(szListReaders);


m_hCard = NULL;


// Display ("Failed SHARE_DIRECT!");


m_Ret = GEM_E_NO_READERS_AVAILABLE;


return;


}


if(szListReaders) free(szListReaders);


// Init the library and select 5 Volt synchronous cards mode :


m_Ret = GCSInit (m_hCard);


if(m_Ret == GEM_SUCCESS)


// Display ("Smartcard subsystem initialized!");


else


// Display ("Error initializing smartcard subsystem!");


return;


}


***********************************************************************************


Void TestClose()


***********************************************************************************


{


if(m_hCard)


{


m_Ret = GCSClose (m_hCard);


SCardDisconnect(m_hCard,SCARD_UNPOWER_CARD);


m_hCard = NULL;


}


if(m_hContext)


{


SCardReleaseContext(m_hContext);


m_hContext = NULL;


}


// Display ("Smartcard connection closed!");


}





***********************************************************************************


void TestPowerUp_WithoutATR()


***********************************************************************************


{


if(!m_hCard)


{


// Display ("Smartcard is not initialized!");


m_Ret = GEM_E_INVALID_PARAMETERS;


return;


}


m_Ret = GSCPowerUp (m_hCard, NULL, NULL);


PUCHAR pOutBuffer = (PUCHAR)m_csSATR.GetBufferSetLength(0);


m_csSATR.ReleaseBuffer( );




if(m_Ret!= GEM_SUCCESS)


// Display ("SC subsystem error!");


else


// Display ("Success!");


}


***********************************************************************************


void TestPowerUp_WithType1ATR() // for the SLE4418/28 & 4432/42


***********************************************************************************


{


if(!m_hCard)


{


// Display ("Smartcard is not initialized!");


m_Ret = GEM_E_INVALID_PARAMETERS;


return;


}


PUCHAR pOutBuffer = (PUCHAR)m_csSATR.GetBufferSetLength(10); // Length
³ ATR size


memset(pInBuffer, 0x00, 10);


DWORD Length = 4; // expected ATR length in bytes


m_Ret = GSCPowerUp (m_hCard, pOutBuffer, &Length);


// Reset buffer length...


m_csSATR.ReleaseBuffer( );


pOutBuffer = (PUCHAR)m_csSATR.GetBufferSetLength(Length);


// The conversion of the sting to HEX should be done before releasing buffer,


// Otherwise the reported string length can be not correct in case of zero byte in buffer


ConvertStringToHex(m_csSATR);


m_csSATR.ReleaseBuffer( );


if(m_Ret!= GEM_SUCCESS)


// Display ("SC subsystem error!");


else


// Display ("Success!");


}


***********************************************************************************


void TestPowerDown()


***********************************************************************************


{


if(!m_hCard)


{


// Display ("Smartcard is not initialized!");


m_Ret = GEM_E_INVALID_PARAMETERS;


return;


}


m_Ret = GSCPowerDown (m_hCard);


PUCHAR pOutBuffer = (PUCHAR)m_csSATR.GetBufferSetLength(0);


m_csSATR.ReleaseBuffer( );


if (m_Ret!= GEM_SUCCESS)


// Display ("SC subsystem error!");


else


// Display ("Success!");


}


***********************************************************************************


void TestReadSLE4418() // case ICC_3_WIRE


***********************************************************************************


// DWORD m_OpLength is the number of bytes to read.


// DWORD m_OpAddress is the address of the 1<SUP>st byte to read.


{


if(!m_hCard)


{


// Display ("Smartcard is not initialized!");


m_Ret = GEM_E_INVALID_PARAMETERS;


return;


}


if (m_OpLength == 0)


{


// Display ("Invalid operation length!");


m_Ret = GEM_E_INVALID_PARAMETERS;


return;


}


PUCHAR pOutBuffer = (PUCHAR)m_csOUT.GetBufferSetLength(m_OpLength);


memset(pOutBuffer,0x00,m_OpLength);


DWORD m_iOUTLength = 0x1000; // Max buffer size in the reader


m_Ret = GSCRead (m_hCard, ICC_3_WIRE, NO_SUB_CARD_TYPE, m_OpAddress,


m_OpLength, pOutBuffer, &m_iOUTLength);


if(m_Ret! =GEM_SUCCESS)


{


// Display ("SC subsystem error!");


m_csOUT.ReleaseBuffer( );


pOutBuffer = (PUCHAR)m_csOUT.GetBufferSetLength(0);


return;


}


else


// Display ("Success!");


if(m_iOUTLength<m_OpLength)


{


// Reset buffer length...


m_csOUT.ReleaseBuffer( );


pOutBuffer = (PUCHAR)m_csOUT.GetBufferSetLength(m_iOUTLength);


}


// Convert string before releasing buffer!


ConvertStringToHex(m_csOUT);


m_csOUT.ReleaseBuffer( ); // This will fix buffer length


}


***********************************************************************************


void TestWriteSLE4418() // case ICC_3_WIRE


***********************************************************************************


// DWORD m_OpLength is the number of bytes to write.


// DWORD m_OpAddress is the address of the 1st byte to write.


// UCHAR pInBuffer[256] is the buffer of the data to write


{


if(!m_hCard)


{


// Display ("Smartcard is not initialized!");


m_Ret = GEM_E_INVALID_PARAMETERS;


return;


}


if (m_OpLength == 0)


{


// Display ("Invalid length! Nothing to write!");


m_Ret = GEM_E_INVALID_PARAMETERS;


return;


}


m_Ret = GSCWrite (hCard, ICC_3_WIRE , NO_SUB_CARD_TYPE, m_OpAddress,


pInBuffer, m_OpLength);




if(m_Ret! =GEM_SUCCESS)


// Display ("SC subsystem error!");


else


// Display ("Success!");


}


***********************************************************************************


void TestVerifySLE4418() // case ICC_3_WIRE


***********************************************************************************


// DWORD m_OpLength = 2 is the number of code bytes for the verify operation.


// UCHAR pInBuffer[2] is the buffer with the 2 code bytes


{


if(!m_hCard)


{


// Display ("Smartcard is not initialized!");


m_Ret = GEM_E_INVALID_PARAMETERS;


return;


}


ret = GSCVerify (hCard, ICC_3_WIRE, m_OpLength, pInBuffer);


if(m_Ret! =GEM_SUCCESS)


// Display ("SC subsystem error!");


else


// Display ("Success!");


}

Merci pour le debut @+++

</SUP>
0
econs Messages postés 4030 Date d'inscription mardi 13 mai 2003 Statut Membre Dernière intervention 23 décembre 2008 24
30 juin 2005 à 15:24
pas de fonction main() ?


Manu
-------------------------------------------
Une question bien posée, c'est une chance de réponse bien adaptée.
0
Flachy Joe Messages postés 2103 Date d'inscription jeudi 16 septembre 2004 Statut Membre Dernière intervention 21 novembre 2023 1
30 juin 2005 à 15:51
Je vois déja un problème : #include "WinScard.h" Il va falloir que tu ouvre ça pour pouvoir faire tes types perso en VB : SCARDCONTEXT par exemple.


Sinon, la traduction des pointeurs est vraiment chiante (je n'est pas
fait gaffe s'il y en avait dans ton code) : il faut utiliser l'API
windows GlobalAlloc et remplacer tous les pointeurs par des adresses
stockées dans des Long.

Je ne te conseil pas de convertir en fait, si tu peut, fait une dll en
C avec tout ce qui s'execute et ne fait en VB que l'inteface graphique
(qui est beaucoup plus longue à faire en C).



A+
Flachy Joe
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
30 juin 2005 à 16:13
Flachy Joe (et les autres) --> il s'agit en fait d'une DLL en C
comportant des fonction d'accès à un lecteur de carte à puce et d'un
code d'example codé en C



Ce que veux c_charly, c'est utilisé cette DLL en vb, donc traduire le
premier post donné en instruction Declare et traduire le code en code
vb pour avoir un exemple afin de faire fonctionner la dll



voir ce post pour plus d'infos : http://www.vbfrance.com/forum.v2.aspx?ID=497672

Charly, je te promet rien, mais si tu n'as pas eu de réponses d'ici là j'essairais de regarder ce code ce soir.



<hr size="2" width="100%">Si le cerveau était assez simple pour que nous puissions le comprendre,

nous serions assez bête pour ne pas le comprendre malgré tout.
0
c_charly Messages postés 21 Date d'inscription lundi 27 juin 2005 Statut Membre Dernière intervention 8 septembre 2005
30 juin 2005 à 16:38
Merci c sympa.
Un autre probl si qq1 a une reponse et que ca ne vous prend pas trop de temps :
En essayant d'utiliser l'ancien lecteur de carte en le branchant sur le port com, je narrive pas a lire la carte car apparemment XP (SP2) bloque la chose.... si qq1 peut desactivé ceci, ca sera cool
Merci @++
0
Rejoignez-nous