Naizgled je sve ok, svi podaci se uspešno očitavaju jedino se podatak o broju lične karte (EID_DOCUMENT_DATA.DocRegNo) vraća sa 8 karaktera umesto 9 (fali poslednja cifra broja).
Da li neko ima ideju u čemu bi mogao biti problem?
Pokušao sam da predjem na CelikNET koji je mmx napravio ali sa njim imam problema u run-time-u (puca, i kaže da ne može da učita odgovarajuću verziju CelikNET-a, problem već prijavljen u tom thread-u).
public class CelikApi {
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;
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;
[DllImport("CelikApi.dll", CharSet = CharSet.Ansi, EntryPoint = "EidStartup")]
public static extern int EidStartup(int version);
[DllImport("CelikApi.dll", CharSet = CharSet.Ansi, EntryPoint = "EidCleanup")]
public static extern int EidCleanup();
[DllImport("CelikApi.dll", CharSet = CharSet.Ansi, EntryPoint = "EidBeginRead")]
public static extern int EidBeginRead(string reader);
[DllImport("CelikApi.dll", CharSet = CharSet.Ansi, EntryPoint = "EidEndRead")]
public static extern int EidEndRead();
//[DllImport("CelikApi.dll", CharSet = CharSet.Auto, EntryPopublic int = "EidReadFixedPersonalData")]
//public static extern public int EidReadFixedPersonalData(EID_FIXED_PERSONAL_DATA fd);
[DllImport("CelikApi.dll", CharSet = CharSet.Ansi, EntryPoint = "EidReadFixedPersonalData")]
public static extern int EidReadFixedPersonalData(ref EID_FIXED_PERSONAL_DATA fd);
[DllImport("CelikApi.dll", CharSet = CharSet.Ansi, EntryPoint = "EidReadDocumentData")]
public static extern int EidReadDocumentData(ref EID_DOCUMENT_DATA dd);
[DllImport("CelikApi.dll", CharSet = CharSet.Ansi, EntryPoint = "EidReadVariablePersonalData")]
public static extern int EidReadVariablePersonalData(ref EID_VARIABLE_PERSONAL_DATA pd);
[DllImport("CelikApi.dll", CharSet = CharSet.Ansi, EntryPoint = "EidReadPortrait")]
public static extern int EidReadPortrait(ref EID_PORTRAIT pd);
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public struct EID_FIXED_PERSONAL_DATA {
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 14)]
public string personalNumber;
public int personalNumberSize;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 60)]
public string surname;
public int surnameSize;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 40)]
public string givenName;
public int givenNameSize;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 25)]
public string parentGivenName;
public int parentGivenNameSize;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 2)]
public string sex;
public int sexSize;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 25)]
public string placeOfBirth;
public int placeOfBirthSize;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 25)]
public string stateOfBirth;
public int stateOfBirthSize;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 11)]
public string dateOfBirth;
public int dateOfBirthSize;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 25)]
public string communityOfBirth;
public int communityOfBirthSize;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public struct EID_DOCUMENT_DATA {
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 9)]
public string docRegNo;
public int docRegNoSize;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 10)]
public string issuingDate;
public int issuingDateSize;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 10)]
public string expiryDate;
public int expiryDateSize;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 30)]
public string issuingAuthority;
public int issuingAuthoritySize;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public struct EID_VARIABLE_PERSONAL_DATA {
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 3)]
public string state;
public int stateSize;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 25)]
public string community;
public int communitySize;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 25)]
public string place;
public int placeSize;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 36)]
public string street;
public int streetSize;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 5)]
public string houseNumber;
public int houseNumberSize;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 2)]
public string houseLetter;
public int houseLetterSize;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 3)]
public string entrance;
public int entranceSize;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 3)]
public string floor;
public int floorSize;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 6)]
public string apartmentNumber;
public int apartmentNumberSize;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public struct EID_PORTRAIT {
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 7700)]
public byte[] portrait;
public int portraitSize;
}
CelikApi pozivam na sledeći način
resultCode = CelikApi.EidBeginRead(readerName);
....
EID_DOCUMENT_DATA dd = new EID_DOCUMENT_DATA();
resultCode = CelikApi.EidReadDocumentData(ref dd);