Publié le 14/03/2006 Dans Programmation
On code!
Importons donc la description de cet ActiveX dans Delphi, pour cela rien de plus simple, Component/Import ActiveX Control, et il faut chercher la librairie EIDLibCtrl.Une fois importée, nous avons une unité avec toutes les fonctions nécessaires pour accéder à la carte d'identité, y compris le support du lecteur SmartCard. Cela semble donc un jeu d'enfant.
- TEIDlib = class(TOleControl)
- private
- FIntf: IEIDlib;
- function GetControlInterface: IEIDlib;
- protected
- procedure CreateControl;
- procedure InitControlData; override;
- public
- function Init(const strReaderName: WideString; lOCSP: Integer; lCRL: Integer;
- out plHandle: Integer): IRetStatus;
- function Exit: IRetStatus;
- function GetID(out ppMapCollection: IMapCollection; out ppCertifCheck: ICertifCheck): IRetStatus;
- function GetAddress(out ppMapCollection: IMapCollection; out ppCertifCheck: ICertifCheck): IRetStatus;
- function GetPicture(out ppMapCollection: IMapCollection; out ppCertifCheck: ICertifCheck): IRetStatus;
- function GetVersionInfo(bSignature: Integer; out ppMapCollection: IMapCollection;
- out pvtSignature: OleVariant): IRetStatus;
- function BeginTransaction: IRetStatus;
- function EndTransaction: IRetStatus;
- function FlushCache: IRetStatus;
- function SelectApplication(vtApplication: OleVariant): IRetStatus;
- function SendAPDU(vtCommand: OleVariant; const pPIN: IPin; out pvtResponse: OleVariant): IRetStatus;
- function VerifyPIN(const pPIN: IPin; const bstrPin: WideString; out plTriesLeft: Integer): IRetStatus;
- function ChangePin(const pPIN: IPin; const strOldPin: WideString; const strNewPin: WideString;
- out plTriesLeft: Integer): IRetStatus;
- function GetPinStatus(const pPIN: IPin; bSignature: Integer; out pvtSignature: OleVariant;
- out plTriesLeft: Integer): IRetStatus;
- function ReadFile(const pPIN: IPin; vtFileId: OleVariant; out pvtData: OleVariant): IRetStatus;
- function WriteFile(const pPIN: IPin; vtFileId: OleVariant; vtData: OleVariant): IRetStatus;
- function SetRawData(const pRaw: IRaw): IRetStatus;
- function GetRawData(out ppRaw: IRaw): IRetStatus;
- property ControlInterface: IEIDlib read GetControlInterface;
- property DefaultInterface: IEIDlib read GetControlInterface;
- published
- property Anchors;
- end;
La documentation étant assez complète, on nous explique qu'il suffit de faire un Init, puis un GetID pour avoir les informations contenues sur la carte. Qu'il en soit donc ainsi:
- procedure TForm1.FormCreate(Sender: TObject);
- var
- lHandler: Integer;
- begin
- FEID := TEIDlib.Create(self);
- FEID.Init('', 0, 0, lHandler);
- end;
- procedure TForm1.FormDestroy(Sender: TObject);
- begin
- FEID.Exit;
- FreeAndNil(FEID);
- end;
Pour pouvoir compiler facilement le projet sans devoir installer le composant, le TEIDLib est créé à la volée, rien de très complexe en soit. Vu qu'un Init doit être terminé par un Exit, il suffit de rajouter un Exit dans le Destroy du form et le tour est joué.
il serait intéressant d'avoir un exemple un peu plus complexe, par exemple incluant une vérification de PinCode. C'est documenté, mais assez mal... Surtout via ActiveX. D'ailleurs l'exemple VB ne le reprend pas...
Cedric
Est-il possible d'exécuter ce programme SANS installer le ressource Kit ?
Car en VB je n'y arrive pas.
Merci
Pour la vérification du PinCode, si ma mémoire est bonne c'est fait au niveau logiciel quand on essaie d'accéder aux données (je pense que c'était même du java), mais c'est juste un lecteur de toute façon, pas question de modifier quoi que ce soit sur la carte.
Mais c'est pas faux sinon, la documentation est limitée, d'ou la vente d'un SDK avec une grosse documentation, il faut bien le justifier *tousse*
Auriez le DLL ou OCX pour que je l'installe ? merci