Hat bereits Erfahrung jedermann mit Code-Finishing in ID-Karten zu lesen, nachdem August 2014?
Wenn jemand Erfahrung in Alaska Xbase ++ hat, würde ich um Hilfe bitten, wird jede Hilfe dankbar.
Vielen Dank im Voraus!
Dies ist der Code für in ID-Karten lesen:
Beginn einer LESE CIP ID-Karten
Code: Alles auswählen
FUNCTION CELIKCITAJ (hWnd,podaci,oComb,vrispr,brefr, wE,podaci2,oXbpPl,koj,oXbpZ,matrdod)
local qret:=12,qret2:=12,qret3:=12,qret4:=12,qret5:=12,qret6:=12,rret1:={},rret2:={},rret3:={},rret4:={},wslika:=""
if !memvar->StartovoCelik
qret:=EidStartup(1)
if qret < EID_OK
* EidCleanup()
nsgbox( lds(1673)+chr(13)+CelikErr(qret)+' :1', lds(3),hWnd,XBPMB_CRITICAL )
return(NIL)
endif
memvar->StartovoCelik := .T.
endif
qret:=EidBeginRead("")
if qret < EID_OK
EidEndRead()
* EidCleanup()
nsgbox( lds(1673)+chr(13)+CelikErr(qret)+' :2', lds(3),hWnd,XBPMB_CRITICAL )
return(NIL)
endif
qret3:=CCITAJ1( rret1 )
if qret3 = -7 .or. ( qret3 = -10 .and. !empty(memvar->C4_Dok)) // Eid card missing
EidEndRead()
EidBeginRead("")
qret3:=CekajiCitaj(hWnd,rret1)
endif
if qret3 = EID_OK
qret4:=CCITAJ2( rret2 )
if qret4 = EID_OK
qret5:=CCITAJ3( rret3 )
if qret5 = EID_OK
*timerlog( rret2[1]+","+rret2[2]+","+rret2[3]+","+rret2[4]+","+rret2[5]+;
* rret2[6]+","+rret2[7]+","+rret2[8]+","+rret2[9]+;
* rret3[1]+","+rret3[2]+","+rret3[3]+","+rret3[4]+","+rret3[5]+","+rret3[6] )
* nsgbox( rret1[1]+","+rret1[2]+","+rret1[3]+","+rret1[4]+CHR(13)+;
* ","+rret2[1]+","+rret2[2]+","+rret2[3]+","+rret2[4]+","+left(rret2[5],10)+CHR(13)+;
* ","+rret2[6]+","+rret2[7]+","+rret2[8]+chr(13)+;
* rret3[1]+","+rret33[2]+","+rret3[3]+","+rret3[4]+","+rret3[5]+","+rret3[6]+","+rret3[7]+","+rret3[8]+",",'Doc')
qret6:=CCITAJ4 (rret4)
if qret6 = EID_OK
wslika:=rret4[1]
endif
EidEndRead()
CITAC_CIPKART (hWnd,rret1,rret2,rret3,wslika,podaci,oComb,vrispr,brefr, wE,podaci2,oXbpPl,koj,oXbpZ,matrdod)
else
EidEndRead()
nsgbox( lds(1673)+chr(13)+CelikErr(qret5)+' :5', lds(3),hWnd,XBPMB_CRITICAL )
return(NIL)
endif
else
EidEndRead()
nsgbox( lds(1673)+chr(13)+CelikErr(qret4)+' :4', lds(3),hWnd,XBPMB_CRITICAL )
return(NIL)
endif
* nsgbox( rret1[1]+","+rret1[2]+","+rret1[3]+","+rret1[4],'Doc 1')
else
EidEndRead()
* EidCleanup()
if qret3 <> -20
nsgbox( lds(1673)+chr(13)+CelikErr(qret3)+' :3', lds(3),hWnd,XBPMB_CRITICAL )
else
* nsgbox( "Nisam docekao. Kraj.",'to')
endif
return(NIL)
endif
return(NIL)
******
FUNCTION CCITAJ1( rret )
local aBin:={},cBin:="",qret:=12,bb:={},n,pd:=""
* Document Data
asize(rret,0)
aBin:= BaInit(8)
BaStruct( aBin, space(EID_MAX_DocRegNo+1) )
BaStruct( aBin, EID_MAX_DocRegNo )
BaStruct( aBin, space(EID_MAX_IssuingDate+1) )
BaStruct( aBin, EID_MAX_IssuingDate )
BaStruct( aBin, space(EID_MAX_ExpiryDate+1) )
BaStruct( aBin, EID_MAX_ExpiryDate )
BaStruct( aBin, space( EID_MAX_IssuingAuthority+10 ) )
BaStruct( aBin, EID_MAX_IssuingAuthority )
cBin := BaAccess( aBin)
* EidBeginRead("")
qret:=EidReadDocumentData( @cBin )
aadd( rret,citStr(BaExValue( cBin,1,EID_MAX_DocRegNo ),1,1) )
aadd( rret,citStr(BaExValue( cBin,17,EID_MAX_IssuingDate ),1,1) )
aadd( rret,citStr(BaExValue( cBin,33,EID_MAX_ExpiryDate ),1,1) )
aadd( rret,KONV_LAT_LAT(citStr(BaExValue( cBin,49,EID_MAX_IssuingAuthority ),1,1) ))
aBin:=NIL
cBin:=NIL
return(qret)
****
FUNCTION CCITAJ2( rret )
local aBin:={},cBin:="",qret:=12
* Fixed personal Data
asize(rret,0)
aBin:= BaInit(18)
BaStruct( aBin, space(EID_MAX_PersonalNumber+10) )
BaStruct( aBin, EID_MAX_PersonalNumber )
BaStruct( aBin, space(EID_MAX_Surname+10) )
BaStruct( aBin, EID_MAX_Surname )
BaStruct( aBin, space(EID_MAX_GivenName+10) )
BaStruct( aBin, EID_MAX_GivenName )
BaStruct( aBin, space( EID_MAX_ParentGivenName+10 ) )
BaStruct( aBin, EID_MAX_ParentGivenName )
BaStruct( aBin, space( EID_MAX_Sex+10 ) )
BaStruct( aBin, EID_MAX_Sex )
BaStruct( aBin, space( EID_MAX_PlaceOfBirth+10 ) )
BaStruct( aBin, EID_MAX_PlaceOfBirth )
BaStruct( aBin, space( EID_MAX_StateOfBirth+10 ) )
BaStruct( aBin, EID_MAX_StateOfBirth )
BaStruct( aBin, space( EID_MAX_DateOfBirth+10 ) )
BaStruct( aBin, EID_MAX_DateOfBirth )
BaStruct( aBin, space( EID_MAX_CommunityOfBirth+10 ) )
BaStruct( aBin, EID_MAX_CommunityOfBirth )
cBin := BaAccess( aBin )
qret:=EidReadFixedPersonalData( @cBin )
aadd( rret,citStr(BaExValue( cBin,1,EID_MAX_PersonalNumber ),1,EID_MAX_PersonalNumber) )
aadd( rret,KONV_LAT_LAT(KONV_CIR_LAT (citStr(BaExValue( cBin,21,EID_MAX_Surname ),1,EID_MAX_Surname) )))
aadd( rret,KONV_LAT_LAT(KONV_CIR_LAT (citStr(BaExValue( cBin,85,EID_MAX_GivenName ),1,EID_MAX_GivenName ))))
aadd( rret,KONV_LAT_LAT(citStr(BaExValue( cBin,129,EID_MAX_ParentGivenName ),1,EID_MAX_ParentGivenName) ))
aadd( rret,citStr(BaExValue( cBin,160,EID_MAX_Sex ),1,EID_MAX_Sex) )
aadd( rret,KONV_LAT_LAT(citStr(BaExValue( cBin,167,EID_MAX_PlaceOfBirth ),1,EID_MAX_PlaceOfBirth) ))
aadd( rret,KONV_LAT_LAT(citStr(BaExValue( cBin,201,EID_MAX_StateOfBirth ),1,EID_MAX_StateOfBirth) ))
aadd( rret,citStr(BaExValue( cBin,233,EID_MAX_DateOfBirth ),1,EID_MAX_DateOfBirth) )
aadd( rret,KONV_LAT_LAT(citStr(BaExValue( cBin,250,EID_MAX_CommunityOfBirth ),1,EID_MAX_CommunityOfBirth)) )
aBin:=NIL
cBin:=NIL
return(qret)
****
FUNCTION CCITAJ3( rret )
local aBin:={},cBin:="",qret:=12
* Variable personal Data
asize(rret,0)
aBin:= BaInit(18)
BaStruct( aBin, space(EID_MAX_State+10) )
BaStruct( aBin, EID_MAX_State )
BaStruct( aBin, space(EID_MAX_Community+10) )
BaStruct( aBin, EID_MAX_Community )
BaStruct( aBin, space(EID_MAX_Place+10) )
BaStruct( aBin, EID_MAX_Place )
BaStruct( aBin, space( EID_MAX_Street+10 ) )
BaStruct( aBin, EID_MAX_Street )
BaStruct( aBin, space( EID_MAX_HouseNumber+10 ) )
BaStruct( aBin, EID_MAX_HouseNumber )
BaStruct( aBin, space( EID_MAX_HouseLetter+10 ) )
BaStruct( aBin, EID_MAX_HouseLetter )
BaStruct( aBin, space( EID_MAX_Entrance+10 ) )
BaStruct( aBin, EID_MAX_Entrance )
BaStruct( aBin, space( EID_MAX_Floor+10 ) )
BaStruct( aBin, EID_MAX_Floor )
BaStruct( aBin, space( EID_MAX_ApartmentNumber+10 ) )
BaStruct( aBin, EID_MAX_ApartmentNumber )
cBin := BaAccess( aBin )
qret:=EidReadVariablePersonalData( @cBin )
aadd( rret,KONV_LAT_LAT(citStr(BaExValue( cBin,1,EID_MAX_State ),1,1) ))
aadd( rret,KONV_LAT_LAT(citStr(BaExValue( cBin,9,EID_MAX_Community ),1,1)) )
aadd( rret,KONV_LAT_LAT(citStr(BaExValue( cBin,41,EID_MAX_Place ),1,1) ))
aadd( rret,KONV_LAT_LAT(citStr(BaExValue( cBin,73,EID_MAX_Street ),1,1) ))
aadd( rret,citStr(BaExValue( cBin,113,EID_MAX_HouseNumber ),1,1) )
aadd( rret,citStr(BaExValue( cBin,122,EID_MAX_HouseNumber ),1,1) )
aadd( rret,citStr(BaExValue( cBin,128,EID_MAX_HouseLetter ),1,1) )
aadd( rret,citStr(BaExValue( cBin,134,EID_MAX_Entrance ),1,1) )
aBin:=NIL
cBin:=NIL
return(qret)
****
FUNCTION CCITAJ4( rret )
local aBin:={},cBin:="",qret:=12
* Personal picture
asize(rret,0)
aBin:= BaInit(2)
BaStruct( aBin, space(EID_MAX_Portrait+50) )
BaStruct( aBin, EID_MAX_Portrait )
cBin := BaAccess( aBin )
qret:=EidReadPortrait( @cBin )
aadd( rret,BaExValue( cBin,1,EID_MAX_Portrait ),1,1)
aBin:=NIL
cBin:=NIL
return(qret)
******
FUNCTION CekajiCitaj(hWnd,rret1) // cekam i probam kad je ubacio karticu
local nEvent,mp1,mp2,oXbp,qret3:=0,qret:=0
local autovr:=seconds(),pocet:=seconds(),oni:={},oD,oProg,prekini:={}
aadd(prekini,.F.)
oni:=N_PROGRES (hWnd,16,prekini,lds(1674)+'...') // 'Ubacite karticu u citac
oD:=oni[1]
oProg:=oni[2]
DO WHILE .T. // nEvent != xbeP_Close
nEvent := AppEvent( @mp1, @mp2, @oXbp, 1 ) // 10
if valtype(nEvent) = "N" .and. nEvent <> xbeP_None .and. nEvent <> 0
oXbp:handleEvent( nEvent, mp1, mp2 )
endif
if autovr + 1.00 < seconds() // ajd da citam
oProg:increment()
qret3:=CCITAJ1( rret1 )
if qret3 = -7 .or. ( qret3 = -10 .and. !empty(memvar->C4_Dok)) // jos nije ubacio karticu
EidEndRead()
qret:=EidBeginRead("")
if qret <> EID_OK
return(qret)
endif
autovr := seconds()
loop
else // procito ok ili neka druga greska
oProg:destroy()
oD:destroy()
return( qret3 )
endif
endif
if pocet + 15.00 < seconds() .or. prekini[1] // proslo cekanje
qret3 := -20
exit
endif
ENDDO
if !prekini[1]
oProg:destroy()
oD:destroy()
endif
return(qret3)
****
#else
FUNCTION CELIKCITAJ (hWnd,podaci,oComb,vrispr,brefr) // dummy da ne puca linker
return(NIL)
#endif
************************************************************************************************************************
* Definition von Funktionen zum Lesen von Chipkarten
#ifdef CelikApi
DLLFUNCTION EidStartup(nApiVersion) USING STDCALL FROM CELIKAPI.DLL
DLLFUNCTION EidCleanup() USING STDCALL FROM CELIKAPI.DLL
DLLFUNCTION EidBeginRead(szReader) USING STDCALL FROM CELIKAPI.DLL
DLLFUNCTION EidEndRead() USING STDCALL FROM CELIKAPI.DLL
DLLFUNCTION EidReadDocumentData(@pData1) USING STDCALL FROM CELIKAPI.DLL
DLLFUNCTION EidReadFixedPersonalData(@pData2) USING STDCALL FROM CELIKAPI.DLL
DLLFUNCTION EidReadVariablePersonalData(@pData3) USING STDCALL FROM CELIKAPI.DLL
DLLFUNCTION EidReadPortrait(@pData4) USING STDCALL FROM CELIKAPI.DLL
#endif
**
Es wird auf der Basis aus
// CelikApi.h
//
#pragma once
#ifdef __cplusplus
extern "C" {
#endif
#ifndef WINAPI
#define WINAPI __stdcall
#endif
#ifndef EID_API
#define EID_API
#endif
//
// Constants
//
// Size of all UTF-8 fields in bytes
const int EID_MAX_DocRegNo = 9;
const int EID_MAX_IssuingDate = 10;
const int EID_MAX_ExpiryDate = 10;
const int EID_MAX_IssuingAuthority = 30;
const int EID_MAX_PersonalNumber = 13;
const int EID_MAX_Surname = 60;
const int EID_MAX_GivenName = 40;
const int EID_MAX_ParentGivenName = 25;
const int EID_MAX_Sex = 2;
const int EID_MAX_PlaceOfBirth = 25;
const int EID_MAX_StateOfBirth = 25;
const int EID_MAX_DateOfBirth = 10;
const int EID_MAX_CommunityOfBirth = 25;
const int EID_MAX_State = 3;
const int EID_MAX_Community = 25;
const int EID_MAX_Place = 25;
const int EID_MAX_Street = 36;
const int EID_MAX_HouseNumber = 5;
const int EID_MAX_HouseLetter = 2;
const int EID_MAX_Entrance = 3;
const int EID_MAX_Floor = 3;
const int EID_MAX_ApartmentNumber = 6;
const int EID_MAX_Portrait = 7700;
//
// Function return values
//
const int EID_OK = 0;
const int EID_E_GENERAL_ERROR = -1;
const int EID_E_INVALID_PARAMETER = -2;
const int EID_E_VERSION_NOT_SUPPORTED = -3;
const int EID_E_NOT_INITIALIZED = -4;
const int EID_E_UNABLE_TO_EXECUTE = -5;
const int EID_E_READER_ERROR = -6;
const int EID_E_CARD_MISSING = -7;
const int EID_E_CARD_UNKNOWN = -8;
const int EID_E_CARD_MISMATCH = -9;
const int EID_E_UNABLE_TO_OPEN_SESSION = -10;
const int EID_E_DATA_MISSING = -11;
const int EID_E_CARD_SECFORMAT_CHECK_ERROR = -12;
const int EID_E_SECFORMAT_CHECK_CERT_ERROR = -13;
//
// Structures
//
// NOTE: char arrays DO NOT have zero char at the end
typedef struct tagEID_DOCUMENT_DATA
{
char docRegNo[EID_MAX_DocRegNo];
int docRegNoSize;
char issuingDate[EID_MAX_IssuingDate];
int issuingDateSize;
char expiryDate[EID_MAX_ExpiryDate];
int expiryDateSize;
char issuingAuthority[EID_MAX_IssuingAuthority];
int issuingAuthoritySize;
} EID_DOCUMENT_DATA, *PEID_DOCUMENT_DATA;
typedef struct tagEID_FIXED_PERSONAL_DATA
{
char personalNumber[EID_MAX_PersonalNumber];
int personalNumberSize;
char surname[EID_MAX_Surname];
int surnameSize;
char givenName[EID_MAX_GivenName];
int givenNameSize;
char parentGivenName[EID_MAX_ParentGivenName];
int parentGivenNameSize;
char sex[EID_MAX_Sex];
int sexSize;
char placeOfBirth[EID_MAX_PlaceOfBirth];
int placeOfBirthSize;
char stateOfBirth[EID_MAX_StateOfBirth];
int stateOfBirthSize;
char dateOfBirth[EID_MAX_DateOfBirth];
int dateOfBirthSize;
char communityOfBirth[EID_MAX_CommunityOfBirth];
int communityOfBirthSize;
} EID_FIXED_PERSONAL_DATA, *PEID_FIXED_PERSONAL_DATA;
typedef struct tagEID_VARIABLE_PERSONAL_DATA
{
char state[EID_MAX_State];
int stateSize;
char community[EID_MAX_Community];
int communitySize;
char place[EID_MAX_Place];
int placeSize;
char street[EID_MAX_Street];
int streetSize;
char houseNumber[EID_MAX_HouseNumber];
int houseNumberSize;
char houseLetter[EID_MAX_HouseLetter];
int houseLetterSize;
char entrance[EID_MAX_Entrance];
int entranceSize;
char floor[EID_MAX_Floor];
int floorSize;
char apartmentNumber[EID_MAX_ApartmentNumber];
int apartmentNumberSize;
} EID_VARIABLE_PERSONAL_DATA, *PEID_VARIABLE_PERSONAL_DATA;
typedef struct tagEID_PORTRAIT
{
BYTE portrait[EID_MAX_Portrait];
int portraitSize;
} EID_PORTRAIT, *PEID_PORTRAIT;
//
// Functions
//
EID_API int WINAPI EidStartup(int nApiVersion);
EID_API int WINAPI EidCleanup();
EID_API int WINAPI EidBeginRead(LPCSTR szReader);
EID_API int WINAPI EidEndRead();
EID_API int WINAPI EidReadDocumentData(PEID_DOCUMENT_DATA pData);
EID_API int WINAPI EidReadFixedPersonalData(PEID_FIXED_PERSONAL_DATA pData);
EID_API int WINAPI EidReadVariablePersonalData(PEID_VARIABLE_PERSONAL_DATA pData);
EID_API int WINAPI EidReadPortrait(PEID_PORTRAIT pData);
#ifdef __cplusplus
};
#endif
************************************************************************************************************************
einschließlich Datei CelikApi.dll
Für die neue Struktur erhielt ich folgende Datei
************************************************************************************************************************
// CelikApi.h
//
#pragma once
#ifdef __cplusplus
extern "C" {
#endif
#ifndef WINAPI
#define WINAPI __stdcall
#endif
#ifndef EID_API
#define EID_API
#endif
#pragma pack(push, 4)
//
// Constants
//
// Size of all UTF-8 and binary fields in bytes
const int EID_MAX_DocRegNo = 9;
const int EID_MAX_DocumentType = 2;
const int EID_MAX_IssuingDate = 10;
const int EID_MAX_ExpiryDate = 10;
const int EID_MAX_IssuingAuthority = 100;
const int EID_MAX_PersonalNumber = 13;
const int EID_MAX_Surname = 200;
const int EID_MAX_GivenName = 200;
const int EID_MAX_ParentGivenName = 200;
const int EID_MAX_Sex = 2;
const int EID_MAX_PlaceOfBirth = 200;
const int EID_MAX_StateOfBirth = 200;
const int EID_MAX_DateOfBirth = 10;
const int EID_MAX_CommunityOfBirth = 200;
const int EID_MAX_State = 100;
const int EID_MAX_Community = 200;
const int EID_MAX_Place = 200;
const int EID_MAX_Street = 200;
const int EID_MAX_HouseNumber = 20;
const int EID_MAX_HouseLetter = 8;
const int EID_MAX_Entrance = 10;
const int EID_MAX_Floor = 6;
const int EID_MAX_ApartmentNumber = 12;
const int EID_MAX_AddressDate = 10;
const int EID_MAX_AddressLabel = 60;
const int EID_MAX_Portrait = 7700;
const int EID_MAX_Certificate = 2048;
//
// Option identifiers, used in function EidSetOption
//
const int EID_O_KEEP_CARD_CLOSED = 1;
//
// Certificate types, used in function EidReadCertificate
//
const int EID_Cert_MoiIntermediateCA = 1;
const int EID_Cert_User1 = 2;
const int EID_Cert_User2 = 3;
//
// Block types, used in function EidVerifySignature
//
const int EID_SIG_CARD = 1;
const int EID_SIG_FIXED = 2;
const int EID_SIG_VARIABLE = 3;
const int EID_SIG_PORTRAIT = 4;
// For new card version EidVerifySignature function will return EID_E_UNABLE_TO_EXECUTE for
// parameter EID_SIG_PORTRAIT. Portrait is in new cards part of EID_SIG_FIXED. To determine
// the card version use second parameter of function EidBeginRead
//
// Function return values
//
const int EID_OK = 0;
const int EID_E_GENERAL_ERROR = -1;
const int EID_E_INVALID_PARAMETER = -2;
const int EID_E_VERSION_NOT_SUPPORTED = -3;
const int EID_E_NOT_INITIALIZED = -4;
const int EID_E_UNABLE_TO_EXECUTE = -5;
const int EID_E_READER_ERROR = -6;
const int EID_E_CARD_MISSING = -7;
const int EID_E_CARD_UNKNOWN = -8;
const int EID_E_CARD_MISMATCH = -9;
const int EID_E_UNABLE_TO_OPEN_SESSION = -10;
const int EID_E_DATA_MISSING = -11;
const int EID_E_CARD_SECFORMAT_CHECK_ERROR = -12;
const int EID_E_SECFORMAT_CHECK_CERT_ERROR = -13;
const int EID_E_INVALID_PASSWORD = -14;
const int EID_E_PIN_BLOCKED = -15;
//
// Structures
//
// NOTE: char arrays DO NOT have zero char at the end
typedef struct tagEID_DOCUMENT_DATA
{
char docRegNo[EID_MAX_DocRegNo];
int docRegNoSize;
char documentType[EID_MAX_DocumentType];
int documentTypeSize;
char issuingDate[EID_MAX_IssuingDate];
int issuingDateSize;
char expiryDate[EID_MAX_ExpiryDate];
int expiryDateSize;
char issuingAuthority[EID_MAX_IssuingAuthority];
int issuingAuthoritySize;
} EID_DOCUMENT_DATA, *PEID_DOCUMENT_DATA;
typedef struct tagEID_FIXED_PERSONAL_DATA
{
char personalNumber[EID_MAX_PersonalNumber];
int personalNumberSize;
char surname[EID_MAX_Surname];
int surnameSize;
char givenName[EID_MAX_GivenName];
int givenNameSize;
char parentGivenName[EID_MAX_ParentGivenName];
int parentGivenNameSize;
char sex[EID_MAX_Sex];
int sexSize;
char placeOfBirth[EID_MAX_PlaceOfBirth];
int placeOfBirthSize;
char stateOfBirth[EID_MAX_StateOfBirth];
int stateOfBirthSize;
char dateOfBirth[EID_MAX_DateOfBirth];
int dateOfBirthSize;
char communityOfBirth[EID_MAX_CommunityOfBirth];
int communityOfBirthSize;
} EID_FIXED_PERSONAL_DATA, *PEID_FIXED_PERSONAL_DATA;
typedef struct tagEID_VARIABLE_PERSONAL_DATA
{
char state[EID_MAX_State];
int stateSize;
char community[EID_MAX_Community];
int communitySize;
char place[EID_MAX_Place];
int placeSize;
char street[EID_MAX_Street];
int streetSize;
char houseNumber[EID_MAX_HouseNumber];
int houseNumberSize;
char houseLetter[EID_MAX_HouseLetter];
int houseLetterSize;
char entrance[EID_MAX_Entrance];
int entranceSize;
char floor[EID_MAX_Floor];
int floorSize;
char apartmentNumber[EID_MAX_ApartmentNumber];
int apartmentNumberSize;
char addressDate[EID_MAX_AddressDate];
int addressDateSize;
char addressLabel[EID_MAX_AddressLabel];
int addressLabelSize;
} EID_VARIABLE_PERSONAL_DATA, *PEID_VARIABLE_PERSONAL_DATA;
typedef struct tagEID_PORTRAIT
{
BYTE portrait[EID_MAX_Portrait];
int portraitSize;
} EID_PORTRAIT, *PEID_PORTRAIT;
typedef struct tagEID_CERTIFICATE
{
BYTE certificate[EID_MAX_Certificate];
int certificateSize;
} EID_CERTIFICATE, *PEID_CERTIFICATE;
//
// Functions
//
EID_API int WINAPI EidSetOption(int nOptionID, UINT_PTR nOptionValue);
EID_API int WINAPI EidStartup(int nApiVersion);
EID_API int WINAPI EidCleanup();
EID_API int WINAPI EidBeginRead(LPCSTR szReader, int* pnCardVersion = 0);
EID_API int WINAPI EidEndRead();
EID_API int WINAPI EidReadDocumentData(PEID_DOCUMENT_DATA pData);
EID_API int WINAPI EidReadFixedPersonalData(PEID_FIXED_PERSONAL_DATA pData);
EID_API int WINAPI EidReadVariablePersonalData(PEID_VARIABLE_PERSONAL_DATA pData);
EID_API int WINAPI EidReadPortrait(PEID_PORTRAIT pData);
EID_API int WINAPI EidReadCertificate(PEID_CERTIFICATE pData, int certificateType);
EID_API int WINAPI EidChangePassword(LPCSTR szOldPassword, LPCSTR szNewPassword, int* pnTriesLeft);
EID_API int WINAPI EidVerifySignature(UINT nSignatureID);
#pragma pack(pop)
#ifdef __cplusplus
};
#endif