[ anebojsa @ 14.04.2023. 14:43 ] @
Kod surname, kada je UnmanagedType.ByValTStr, ne vide se cirilicna slova
kada je UnmanagedType.LPUTF8Str vidi se cirilica, ali fale prva dva slova
i tog momenta se gube parentGivenName itd

Potrebna mi je pomoc oko prikaza cirilicnih slova

Uklanjao sam i CharSet = CharSet.Ansi i opet nista, ubacivao i Auto i Unicode i opet nista

SizeConst = EID_MAX_PersonalNumber + 1 - stavljeno da bi se video 13-ti broj

Latinicni podaci se normalnoo vide

Code:

        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
        public struct PEID_FIXED_PERSONAL_DATA
        {
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = EID_MAX_PersonalNumber + 1)]
            public string personalNumber;
            public int personalNumberSize;
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = EID_MAX_Surname)]
            public string surname;
            public int surnameSize;
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = EID_MAX_GivenName)]
            public string givenName;
            public int givenNameSize;
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = EID_MAX_ParentGivenName)]
            public string parentGivenName;
            public int parentGivenNameSize;
            ...



[ Mihajlo Cvetanović @ 14.04.2023. 20:05 ] @
Ta polja na žalost nisu stringovi u C#, nego nizovi bajtova. Ne može da se koristi automatika koju nudi .NET maršaler. Odgovarajući string se dobija tako što se podniz toga niza (čiju dužinu imaš u sledećem polju) konvertuje u string sa Encoding.UTF8.

Inače ima ceo jedan topik u kome je korisnik mmix objavio sors .NET biblioteku koji koristi Čelik API da pročita podatke. Vredi pročitati, čisto jer možeš da naletiš na neki problem koji je tu već spomenut. https://www.elitesecurity.org/...LR-Interop-Wrapper-za-CelikAPI

A negde na kraju tog topika napisao je da je napravio github repo sa svim izmenama koje se spominju na topiku, pa možeš to da preuzmeš i koristiš, što ti je možda i najbolja opcija, ili da proučiš sors za svoje potrebe: https://gitlab.com/wolf.group/mitro.celikcore . Kod je napisan na C++/CLI umesto na C#, ali može da se isprati, nije to mnogo komplikovano.

Samo obriši fajlove CelikNET.suo i CelikNET\CelikNET.vcxproj.user jer oni ne treba da stoje tu, nego treba tvoj Visual Studio automatski da ih generiše za tvoje okruženje.
[ anebojsa @ 14.04.2023. 21:23 ] @
Hvala
Citat:
Mihajlo Cvetanović: Ta polja na žalost nisu stringovi u C#, nego nizovi bajtova.

Resenje je kombinacija: UnmanagedType.ByValArray i public byte[] surname;

U tom slucaju ne treba dodavati + 1

SizeConst = EID_MAX_PersonalNumber

sad sve radi kako treba, hvala jos jednom

Code:

        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
        public struct PEID_FIXED_PERSONAL_DATA
        {
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = EID_MAX_PersonalNumber)]
            public byte[] personalNumber;
            public int personalNumberSize;
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = EID_MAX_Surname)]
            public byte[] surname;
            public int surnameSize;
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = EID_MAX_GivenName)]
            public byte[] givenName;
            public int givenNameSize;
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = EID_MAX_ParentGivenName)]
            public byte[] parentGivenName;
            public int parentGivenNameSize;
            ...

[ DM2 @ 20.10.2023. 12:37 ] @
Pozdrav svima,

Ovakav niz dobijem kako odgovor aplikacije koja cita licnu kartu
kao ovo prikazati u srpskoj cirilici ?

byte[] bytes = new byte[] {
0x0A, 0x06, 0x09, 0x00, 0x30, 0x31, 0x31, 0x34, 0x37, 0x33, 0x39, 0x33, 0x31, 0x09, 0x06, 0x03,
0x00, 0x53, 0x52, 0x42, 0x0B, 0x06, 0x02, 0x00, 0x49, 0x44, 0x0C, 0x06, 0x0B, 0x00, 0x49, 0x44,
0x30, 0x31, 0x31, 0x34, 0x37, 0x33, 0x39, 0x33, 0x31, 0x0D, 0x06, 0x08, 0x00, 0x33, 0x30, 0x30,
0x39, 0x32, 0x30, 0x32, 0x31, 0x0E, 0x06, 0x08, 0x00, 0x33, 0x30, 0x30, 0x39, 0x32, 0x30, 0x33,
0x31, 0x0F, 0x06, 0x17, 0x00, (byte) 0xD0, (byte) 0x9F, (byte) 0xD0, (byte) 0xA1, 0x20, (byte) 0xD0, (byte) 0x85,
(byte) 0xD0, (byte) 0x90, (byte) 0xD0, (byte) 0x89, (byte) 0xD0, (byte) 0x90, (byte) 0xD0, (byte) 0xA0, (byte) 0xD0,
(byte) 0x8B, (byte) 0xD0, (byte) 0x8E, (byte) 0xD0, (byte) 0x90, (byte) 0xD0, (byte) 0xA6, 0x10, 0x06, 0x02,
0x00, 0x53, 0x43, 0x11, 0x06, 0x02, 0x00, 0x53, 0x43
};
[ Mihajlo Cvetanović @ 31.10.2023. 18:34 ] @
Nije jasno otkud se stvorio ovaj niz bajtova, niti šta predstavlja. Koja je to "aplikacija koja čita ličnu kartu"? Kako to da je ovaj niz bajtova rezultat rada te aplikacije?
[ mjanjic @ 02.11.2023. 17:39 ] @
Dešava se kad aplikacija, koja dobija podatke, nema ugrađenu logiku kako da interpretira niz bajta, i onda možda neke kontrolne i druge bajtove interpretira kao tekst, pa još ako ne prepoznaje UTF-8...
[ anebojsa @ 02.11.2023. 20:22 ] @
moze li neko parce koda da vidimo o cemu se radi