[ mmix @ 26.11.2010. 10:53 ] @
Eve ga

Q&A:

1. Kako se koristi?
A: Dodati CelikNET u reference, u deployment dodati i CelikAPI jer ga CelikNET referencira.

2. Zasto CelikAPI nije u binaries?
A: Nisam siguran koja mu je licenca pa ga nisam ukljucio, u svakom slucaju imate radnu verziju u source arhivi

3. Zasto LGPL?
A: Cilj mi nije bio da zaradim pare na ovome, proizvod je besplatan samo ne zelim da ga neko prodaje za svoj ceh. LGPL umesto GPL da biste mogli da ga koristite u sopstvenim komercijalnim aplikacijama bez da ste nesto duzni meni ili komuni. Ako me se setite u About boxu za dan Bezbednosti, setite, ako ne to je bila moja gradjanska duznost.

4. User manual?
A: Mnogo hocete Pogledajte celikAPI doc, od mene ovoliko:

Code (csharp):

                using (CelikNET.CelikInterop x = new CelikNET.CelikInterop())
                {
                    CelikNET.FixedPersonalData d1 = x.ReadFixedPersonalData();
                    CelikNET.VariablePersonalData d2 = x.ReadVariablePersonalData();
                    CelikNET.DocumentData d3 = x.ReadDocumentData();
                    Bitmap c = x.ReadProfileImage();
                }
 


5. Sta je sa inicijalizacijom/cleanup-om?
A: Static type konstruktor inicijalizuje API, application cleanup ga cisti (preko destruktora static singletona). Sam CelikInterop koristi Disposable pattern za Begin/End read, tako da je sve transparentno, koristite using(...) {} i uzivajte

6. WPF ne koristi Bitmap image, kako da prikazem sliku
A: Postoji konvertor koji prebacuje GDI Bitmap u WPF BitmapSource, proguglajte

7. Podrska za cirilicu?
A: Tu je, cirilicna polja se vracaju kao unicode cirilica

8. Sta je CelikException?
A: Njega baca CelikNET kad neka od CelikAPI funkcija vrati negativan rezultat. CelikException Ima sledeca vazna polja (primer)
EIDErrorCode -> -1
EIDErrorDescriptionEn -> "General error"
EIDErrorDescriptionSr -> "Opšta greška" // <- cirilicom

9. Multithreading?
A: Sve instance metode su thread safe (serijalizuje se pristup APIu). Medjutim u ovom trenutku isntancijacija nije serijalizovana, ukoliko se uspostavi potreba za ozbiljan multithreading support, dodacemo.

Ova tema je otvorane za priedbe, komentare, sugestije.

UPDATE 2: Ubaceno ime roditelja. Fix za static konstruktor u C++/CLI.

[Ovu poruku je menjao mmix dana 01.12.2010. u 12:25 GMT+1]
[ vbvlada @ 26.11.2010. 22:47 ] @
Čini mi se da si zaboravio ime roditelja, vidim da ga nema u strukturi :)
Taman sam uključio binaries, kad ono nema tog podatka, pa pomislih da ti nije neki stariji build, kad ono, cvrc :)
[ mmix @ 26.11.2010. 23:15 ] @
yup, fali, updateovacu ujutro
[ vbvlada @ 27.11.2010. 14:16 ] @
Ne bih baš da zvocam, ali ako bi moglo da se builduje za .NET 2.0, ukoliko nije zahtev da je 4.0, a mislim da nije :)
[ vbvlada @ 01.12.2010. 10:55 ] @
Ovde ipak nešto nije kako treba...
Program radi samo u Debug modu kada se pokrene iz Visual Studia, i to na XP-u. Na Win7 pročita sve podatke iz nekoliko pokušaja, a nekad se baš zainati, mada verujem da je to do drajvera.


Sa CTRL + F5 pre pojavljivanja forme ispisuje se sledeća greška

Visual Studio Just-In-Time Dubugger:
An unhandled Microsoft .NET Framework exception occured in MojProgram.exe [58136]

.. i nudi mi da debagujem program...

Nakon prihvatanja da debagujem, to je dakle kada je program još uvek pokrenut, vidim da se izbacuje CelikException sa porukom "BeginRead nije izvršen", a to je prilikom kreiranja objekta CelikInterop. Stavio sam to u try-catch, čisto da vidim dokle ću da doguram, i nakon toga mi se forma prikazala. Naravno čitanja nije bilo, i prilikom zatvaranja aplikacije ista greška, samo vezana za EndRead.

Miljane, pošto si rekao da je baratanje sa životnim ciklusom tog objekta slobodno, shvatam da mogu da ga kreiram u konstruktoru neke moje klase tipa LKDataProvider, koja služi da pročita podatke i vrati ih onako kakvi mi trebaju.

Da li je možda do toga kako je DLL buildovan ili šta već (ja sam dodao referencu iz CelikNet - Binaries)
[ mmix @ 01.12.2010. 11:12 ] @
OK, pronasao sam o cemu se radi. C++ compiler je istripovan u release build-u

http://connect.microsoft.com/V...or-not-called-in-release-build

ubacicu workaround u klasu
[ mmix @ 01.12.2010. 11:26 ] @
Ok, skini novu verziju pa probaj, trebalo bi da je resen problem (sad vec radim na slepo jer sam morao da vratim licnu kartu)

[ vbvlada @ 01.12.2010. 12:32 ] @
Pomenuti problem je rešen.
Sada na XP-u radi bez greške u svim varijantama.
Ako misliš da će i drugima biti od koristi da se builduje za .NET 2.0, postavi tu verziju, ukoliko ne, onda ću instalirati C++, pa ću da buildujem za sebe :)
U svakom slučaju hvala još jednom!
[ dejansta @ 23.01.2011. 00:57 ] @
Pozdrav,
skinuo sam projekat i pokrenuo CelikNET-Source2/CelikNET.sln

Nakon Rebuild Solution i pokretanja (F5) dobijam poruku "Could not load file or assembly 'CelikNET.dll' or one of its dependencies. The specified module could not be found.

Nemam iskustva sa povezivanjem dll-ova pa bi mi pomoc oko ovoga dobro dosla.

Unapred hvala
[ aca andrijevic @ 26.01.2011. 12:31 ] @
CelikNET je napravljan u VS2010 i pod .NET 4.0 framework-om, pa pretpostavljam da pokusavas
da ga implementiras u starijim verzijama, sto je neizvodljivo.Resenje je da instaliras VS2010 pa
da razvijas u njemu.Mada ja bas gledam ovih dana nesto temu i napravio sam za mene verziju za
.NET 3.5, ali nisam stigao da je isprobam jer nemam citac pri ruci, pa cu upload-ovati ovde .dll pa
probajte (naravno samo ako se Miljan slaze). 8)
[ mmix @ 26.01.2011. 12:57 ] @
Okaci slobodno. Sve i da hocu (a necu) ne mogu da ti zabranim. LGPL.
[ aca andrijevic @ 26.01.2011. 15:13 ] @
Evo ga.Imam problema sa atributima, tj. ne pokazuju se kada se referencira
(kada ga otvoris posebno, tu su).Mozda je zbog express verzije c++ ili zato sto
je .NET 3.5, ne bih znao.Probajte pa javite.
[ aca andrijevic @ 27.01.2011. 21:17 ] @
Evo dobavih se do nekog citaca, radi sve.Zanimljivo je da je samo ime i prezime
na cirilici, ostali podaci su na latinici.Uglavnom VB.NET source test:



[ jablan @ 27.01.2011. 23:16 ] @
@mmix: Što ne okačiš na github ili tako negde?
[ mmix @ 28.01.2011. 07:50 ] @
lokal patriotizam i lojalnost prema ESu? :) Videcemo :)
[ dejansta @ 05.02.2011. 16:03 ] @
aco,

skinuo sam tvoj projekat citac licnih karata.rar i moze da se pokrene (ranije sam imao problem sa dll- om) .
Uspesno procita tekstualne podatke iz gornjeg dela forme ali neuspeva da procita "Ostale podatke " i sliku.

Javlja sledecu poruku: Kod greske= -7 Kartica nije prisutna u citacu

Interesantno, dok sam ovo pisao prebacio sam ocitavanje slike ispred citanja ostalih podataka i sada sve radi odlicno!

'Podaci o ličnoj karti
Dim d1 As CelikNET.DocumentData = x.ReadDocumentData
TextBox1.Text = d1.docRegNo
TextBox2.Text = d1.issuingDate
TextBox3.Text = d1.expiryDate
TextBox4.Text = d1.issuingAuthority

'Lični podaci
Dim d2 As CelikNET.FixedPersonalData = x.ReadFixedPersonalData
TextBox5.Text = d2.personalNumber
TextBox6.Text = d2.givenName
TextBox7.Text = d2.surname
TextBox8.Text = d2.sex
TextBox9.Text = d2.placeOfBirth
TextBox10.Text = d2.stateOfBirth
TextBox11.Text = d2.dateOfBirth
TextBox12.Text = d2.communityOfBirth

'Slika
PictureBox1.Image = x.ReadProfileImage()

'Ostali podaci
Dim d3 As CelikNET.VariablePersonalData = x.ReadVariablePersonalData
TextBox13.Text = d3.state
TextBox14.Text = d3.community
TextBox15.Text = d3.place
TextBox16.Text = d3.street
TextBox17.Text = d3.houseNumber
TextBox18.Text = d3.houseLetter
TextBox19.Text = d3.entrance
TextBox20.Text = d3.floor
TextBox21.Text = d3.apartmentNumber

Imas li ideju zbog cega se ponasa ovako? Kada vratim citanje slike iza Ostalih podataka opet ne radi i javlja istu gresku.

Hvala mmix-u i aci za projekat.
[ mrxfon @ 11.02.2011. 12:39 ] @
Da li sam ja jedini kome ovaj projekat ne radi ?

Cudno mi je sto mi radi MUP app ali ovaj projekat prijavljuje -1 opstu gresku na

Code:
Dim d1 As CelikNET.DocumentData = x.ReadDocumentData


Da li znate sta moze da bude uzrok tome?
[ mrxfon @ 12.02.2011. 17:43 ] @
Ipak radi..
Nije hteo da mi proradi na poslu, pa mi nije bilo tesko da donesem citac i da probam app kuci. Radi bez problema.

[ Ronel123 @ 16.02.2011. 16:35 ] @
Pozdrav svima.

Dobio sam projekat u skolu za diplomski rad da napisem program za citac kartica i da podatke snimim u jednu msql bazu.
Probao sam da napisem svoj prevodic za CelikApi.dll za C# ali nece da radi. Nerazumem jos ovo marshalling mnogo...

A onda nasao sam ovaj wraper i izgleda da to bi mi perfektno odgovarao ali nerazumem neke stvari i te bih hteo da pitam i da dobijem malo pomoc za to ako moze.

Kada hocu da nazovem funkciju da citac procita podatke sa kartice i da to snimi onda treba samo da upisem ovo? :
Code:
using (CelikNET.CelikInterop x = new CelikNET.CelikInterop())
                {
                    CelikNET.FixedPersonalData d1 = x.ReadFixedPersonalData();
                    CelikNET.VariablePersonalData d2 = x.ReadVariablePersonalData();
                    CelikNET.DocumentData d3 = x.ReadDocumentData();
                    Bitmap c = x.ReadProfileImage();
                }


Ne treba nista drugo? Netreba ovaj EidStartup i ostali? To ne razumem. Ovaj mi je prvi put da radim sa wraperom i sa dllima. Noob sam sa ovima jos .
Ne treba da mu dam ime citac kartica da bih znao odakle da cita? Ili to radi automatski?

Izvinite ako ove pitanje izgledaju glupe ali ja to nerazumem.

Pozdrav,
Ronel123
[ mmix @ 16.02.2011. 21:13 ] @
Da, to je sve sto ti treba, inicijalizacija se radi transaprentno u pozadini. Sto se tice odabira citaca trenutna verzija to ne podrzava, uvek radi sa prvim citacem na sistemu.
[ Ronel123 @ 18.02.2011. 16:48 ] @
Hvala lepo na odgovor. Probacu ga ovako.
Poz
Ronel
[ KARABAYA @ 15.04.2011. 16:24 ] @
i meni javlja gresku :

"Could not load file or assembly 'CelikNET.dll' or one of its dependencies. The specified module could not be found."

Ne znam kako da resim probelm.

Koristim visual studio 2010 a ovo mi se desava akd poksuvam da pokrenem CelikNET-Source2.
[ Blue82 @ 16.05.2011. 13:37 ] @
Nisam još isprobao program na 2010 platformi ali za ovaj na 2008 platformi dobijam gresku:

Code:

System.IO.FileLoadException was unhandled
  Message="Could not load file or assembly 'CelikNET, Version=1.0.4043.27411, Culture=neutral, PublicKeyToken=null' or one of its dependencies. This application has failed to start because the application configuration is incorrect. Reinstalling the application may fix this problem. (Exception from HRESULT: 0x800736B1)"
  Source="Citac licnih karata"
  FileName="CelikNET, Version=1.0.4043.27411, Culture=neutral, PublicKeyToken=null"
  FusionLog=""
  StackTrace:
       at Citac_licnih_karata.Form1.Button1_Click(Object sender, EventArgs e)
       at System.Windows.Forms.Control.OnClick(EventArgs e)
       at System.Windows.Forms.Button.OnClick(EventArgs e)
       at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
       at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
       at System.Windows.Forms.Control.WndProc(Message& m)
       at System.Windows.Forms.ButtonBase.WndProc(Message& m)
       at System.Windows.Forms.Button.WndProc(Message& m)
       at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
       at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
       at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
       at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
       at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
       at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
       at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
       at System.Windows.Forms.Application.Run(ApplicationContext context)
       at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun()
       at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel()
       at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine)
       at Citac_licnih_karata.My.MyApplication.Main(String[] Args) in 17d14f5c-a337-4978-8281-53493378c1071.vb:line 81
       at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
       at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
       at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
       at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       at System.Threading.ThreadHelper.ThreadStart()
  InnerException: System.Runtime.InteropServices.COMException
       Message="This application has failed to start because the application configuration is incorrect. Reinstalling the application may fix this problem. (Exception from HRESULT: 0x800736B1)"
       ErrorCode=-2147010895
       InnerException: 



U cemu je problem?
[ Mihajlo Cvetanović @ 16.05.2011. 14:02 ] @
CelikNET je wrapper oko Čelik API-ja. Da li imaš CelikAPI.dll u istom folderu gde je i CelikNET.dll?
[ Blue82 @ 16.05.2011. 15:05 ] @
Nalaze se u istom folderu.
[ Mihajlo Cvetanović @ 16.05.2011. 15:26 ] @
Zbog onog "HRESULT: 0x800736B1" slutim da je problem sa CelikApi.dll, ali ovako izdaleka ne mogu da kažem tačno šta. Da li je i tvoj EXE u istom folderu? Ako jeste, šta se dešava ako EXE pokreneš direktno (umesto iz Visual Studia)? Treća stvar, skini Dependency Walker, i vidi da li postoji neki problem sa DLL-om (ne bi trebalo, al' ajde da vidimo). Probaj da sklonis DLL (samo ga preimenuj) pa vidi da li se javlja ista greška (isti HRESULT).
[ Blue82 @ 16.05.2011. 15:34 ] @
hajde ovako posto verujem da cemo tako najbrze pronaci gresku. Pogledaj na prvoj strani poslednji post od Ace Andrijevic-a. Uz njegov post je prikacen sorce. Pokusaj ga samo otpakovati, nista nisam dirao, tako je kako stoji u primeru. Kada pokrenem kao exe manje vise isti slucaj. Slika u prilogu. Posle continue ne desi se nista.
[ Mihajlo Cvetanović @ 16.05.2011. 16:03 ] @
Na žalost, već sam uposlen drugim stvarima, tako da ne mogu time da se bavim, a kod kuće ni nemam Visual Studio. Mogu da pomognem samo savetima.
[ Blue82 @ 16.05.2011. 16:09 ] @
U svakom slucaju hvala. Pokusacu na 2010 platformi onaj drugi primer samo kad dodjem kuci pa mozda tamo proradi.
[ aca andrijevic @ 16.05.2011. 18:23 ] @
Nisam na ovoj temi nesto skoro pisao, izvinjavam se.Za Blue82:Verovatno nemas C++ runtime libraries
ili su ti starije verzije istih, jer da nemas dobar CelikAPI.dll ili CelikNET.dll bila bi drugacija poruka o gresci.
Kao sto je Mihajlo rekao skini DependecyWalker, pa vidi da li su ti sve reference fajlovi tu.
Pogledaj da skines Microsoft Visual C++ 2005 SP1 Redistributable Package (x86) i instaliraj, pa probaj.

[ Blue82 @ 16.05.2011. 22:10 ] @
Hvala Aco, provericu to sutra posto sada nisam za tim racunarom, mada verovatno to nemam, jer kad god mi punudi update necega sa c++ ja odbijem, kao sta ce mi ako nemam c++ :)

Javim sutra!
[ Blue82 @ 17.05.2011. 06:08 ] @
Na zalost, jutros sam probao i istu gresku prijavljuje. Instalirao sam C++ runtime libraries a DependecyWalker ne znam kako se koristi.
[ vbvlada @ 06.06.2011. 14:34 ] @
Nevezano za par prethodnih postova, već za čitače uopšte: da li je neko našao Smart Card čitač koji može bez problema da radi na Win 7?
Jer kad smo krenuli u ovu priču, ustanovili smo da je možda drajver kriv što se svi podaci ne čitaju kako treba odjednom.
Ja imam neki stari čitač na kome ima etiketa za XP i stvarno tamo radi kako treba; i CelikNET i Celik od MUP-a, dok ovamo oba štucaju.
Ima li neko predlog za čitač za Win 7?
[ vbvlada @ 10.06.2011. 13:43 ] @
Ima li nekog kome ovo radi kako treba na Windows 7?

Pre ovog .NET Wrapper-a ja sam napravio DLL import varijantu ali mi i ona pravi probleme - radi samo u Debug modu, dok pri pokretanju EXE fajla čita naizmenično fiksne podatke, pa one promenljive, pa onda pukne kod čitanja slike itd...
[ aca andrijevic @ 10.06.2011. 14:36 ] @
Jedino sto mi pada na pamet(ako vec nisi to uradio) je da u Project>Project Properties>Compile>
Advanced Compiling Options>Target CPU izaberes x86.Imao sam problem sa jednom drugom aplikacijom
koju sam radio u VS2008 da nateram da radi u Windows7, pa sam negde procitao da treba to da promenim.
[ vbvlada @ 10.06.2011. 15:05 ] @
Ne znam sad za koji projekat pričaš, misliš na ovaj sa DLL import-om što sam pomenuo ili na .NET Wrapper?
Kod oba su target platform x86, tako da ne znam šta je u pitanju.

Što se tiče slučaja da radi samo kada pokrenem u Debug modu iz VS2010, negde sam pročitao da je to zato što tada VS sam inicijalizuje neke promenljive, dok bez debug-a to ne radi, pa mogu da postoje razlike. E sad, meni to kada ne radi, jednostavno mi C funkcija vrati prazna polja, dakle bez podataka.
Videću u ponedeljak sa drugim čitačem kako će da se ponaša, jedna firma će mi dozvoliti pre prodaje da ih probam, a kažu da bez problema radi na win7.
[ draganksg @ 19.08.2011. 11:36 ] @
Cao momci,

izvinjavam se sto se malo kasnije ukljucujem, ali tek sada imam potrebu za citacem LK.

"Wrapper za CelikAPI" kod mene radi samo na XP. U 7 imam isti problem kao i Blue82.

Iz VS2008 na XP radi sve ok.
Iz VS2010 na XP imam sledeci probem : Mixed mode assembly is built against version 'v2.0.50727' of the runtime and cannot be loaded in the 4.0 runtime without additional configuration information.

PS : Nisam bas vican VS i C#. Koristim neke druge dev alate. Tako da mi je potreban odgovor (resenje) sto je najvise moguce u detalje opisano resenje. HVALA unapred.
[ _owl_ @ 19.08.2011. 11:54 ] @
Probaj da instaliras VC++ 2010 Redistributable
[ draganksg @ 19.08.2011. 14:08 ] @
Pozdrav _owl_,

hvala na odgovoru, ali nije 'delovalo'. Mozda bi trebalo jos malo da objasnim sta mi se desava .
Najpre sta sam uradio u svom kodu .
Oba koda su ista i u VS 2008 i uVS 2010.

CelikNET je referenciran, dok sam CelikApi.dll samo fizicki kopirau u Debug folder.
U button click dogadjaju sam ubacio samo par redova koda za samo nekoliko podataka koje sam za probu zeleo da procitam sa LK

using (CelikNET.CelikInterop x = new CelikNET.CelikInterop())
{
CelikNET.FixedPersonalData d1 = x.ReadFixedPersonalData();
CelikNET.VariablePersonalData d2 = x.ReadVariablePersonalData();
CelikNET.DocumentData d3 = x.ReadDocumentData();
Bitmap c = x.ReadProfileImage();

txtBrojLK.Text = d3.docRegNo;
txtJBMG.Text = d1.personalNumber;
txtIme.Text = d1.givenName;
txtPrezime.Text = d1.surname;

pctSlika.Image = x.ReadProfileImage();
}

U XP-u :

kod iz VS2008 radi pozvan iz njega ili pozivom na exe fajl.

U WIN 7 :

taj poziv exe fajlu izaziva gresku kao na slici





Sto se tice VS2010 :

u XP-u kada pozovem na izvrsenje programa iz VS javlja mi : Mixed mode assembly is built against version 'v2.0.50727' of the runtime and cannot be loaded in the 4.0 runtime without additional configuration information.

a u WIN 7 kada pozovem exe javlja mi se opet ista greska kako i kod exe fajla iz 2008.


Ako imas malo bolji uvid u moj problem ili neko drugi zna sta mi je ciniti molio bih vas da mi ponudite resenje.
Podsecam vas da mi VS i C# nije glavni alat za razvoj vec samo zelim da napravim exe koji ce mi citati podatke LK i na XP-u i na WIN7 i upisivati ih u txt fajl. a kao dodatak cuvati fotografiju sa LK u zasebnom jpg ili nekom drugom tipu fajl. Tako da ove podatke i sliku mogu preuzeti u mojoj glavnoj aplikaciji, i dalje smestati ih u bazu podataka .

Jos jednom se unapred zahvaljujem.



[Ovu poruku je menjao draganksg dana 19.08.2011. u 17:13 GMT+1]
[ draganksg @ 24.08.2011. 08:00 ] @
Upotrebom cuvene metode "MUUP - metoda uzaludnih uzastopnih pokusaja" , dosao sam do resenja mog problema i problema koji ima 'Blue82'.

Samo u slucaju izvrsavanja koda u WIN 7, treba kopirati sledece dll-ove : msvcm90d.dll, msvcp90d.dll i msvcr90d.dll
u folder gde se nalazi CelikNET.dll.

Ove dll-ove cete naci negde u \Windows\winsxs\ folderu. Ako se ne snadjete mogu kasnije bas da vam dam i tacan folder gde se nalaze.

Zao mi je samo sto niko od kolega nije hteo da podeli resenje samnom, cime ne bih izgubio vreme na MUUP. Ali to je njihov sebican problem.

Jos jednom se zahvaljujem kolegi MMIX sto je nesebicno podelio sa nama CelikNET.dll. HVALA.

PS: ja sam svoj kod razvijao u VS2010 zasebno u XP i u WIN7, iako je prilicno slican. Zasto je to tako moralo biti nisam imao vremena da istrazujem.
Uglavnom kod napisan u XP nije hteo da se izvrsava u WIN7 sve dok ga nisam na WIN 7 ubacio u VS2010 i tu BUILD-ovao.
Za sada ovako radi, mada nisam puni test obavio. Javljam kasnije kako sve to radi pod XP i pod WIN 7.


POZDRAV
[ Mihajlo Cvetanović @ 24.08.2011. 09:27 ] @
Za CelikAPI i za CelikNET ti sigurno ne trebaju msv*d.dll biblioteke (sa "d" na kraju), jer su to Debug verzije biblioteka. Te verzije su stoga potrebne za nešto drugo što nema veze sa Čelikom, a što je vezano za tvoj projekat. To je ujedno i razlog zašto niko nije mogao da ti pomogne. Problem je negde drugde.
[ Fanthom @ 22.06.2012. 13:55 ] @
Vec 2 dana pokusavam da resim problem:

"Could not load file or assembly 'CelikNET.dll' or one of its dependencies. The specified module could not be found."

Sve sam probao, problem je sto ne ucitava fino CelikApi.dll, kao da ne moze da ga nadje, iako je u istom folderu kao CelikNet.dll.. Slucajno sam naleteo u drugoj temi na odgovor, pa samo da ustedim drugima koji imaju isti problem. jer vidim da ovde taj problem nije resen..

Resenje je da se prekopira CelikApi.dll u Windows/system32 folder..
Ukoliko je u pitanju 64bitna masina onda se kopira u Windows\SysWOW64

Ne znam zasto to tako, jer ocigledno kod drugih radi i bez toga, tj dovoljno je da je CelikApi u istom folderu kao CelikNet, ali cim sam prekopirao, odmah mi je proradilo..

Ako neko mozda ima objasnjenje, bilo bi dobro da ga napise..

[Ovu poruku je menjao Fanthom dana 22.06.2012. u 19:45 GMT+1]
[ Scorpio76 @ 22.05.2013. 10:46 ] @
Ako ima još ljudi koji su imali problema na Windows 7 sa povremenim čitanjem a povremenim vraćanjem greške, ili problema sa Debug vs Release varijantama ili sličnih gremlin varijanti proverite koju verziju CelikApi.dll koristite.

Meni su se na primer javljali gremlini u Windows 7 sa verzijom CelikApi.dll 1.0.1.0 koja je veličine 843.776b dok mi je sa verzijom 1.1.0.0 veličine fajla 929.792b sve proradilo na 100% read. Verzija 1.1.0.0. radi i sa CelikNET fw4.0 i sa CelikNET fw3.5 koji su postavljeni ranije u ovom threadu.

Nadam se da će ovo još nekom pomoći.

Pozdrav
[ Mihajlo Cvetanović @ 22.05.2013. 11:15 ] @
Verzija 1.1 (ili neformalno Čelik+) ima neke nove funkcionalnosti i nove funkcije, ponajpre proveru potpisa na kartici. Stari CelikNET radi sa novom verzijom API-ja, ali da bi se koristile nove funkcionalnosti potrebno je unaprediti CelikNET. Za ovu proveru potpisa potrebni su razni sertifikati, koji dolaze uz instalaciju Čelika+, a mislim da mogu i posebno da se skinu sa sajta MUP-a.
[ srboljub79 @ 10.04.2014. 14:20 ] @
Pitanje u vezi deploymenta

Implemetirao sam u aplikaciji koriscenje CelikApi.dll.
Razvojno okruzenje je VS 2008
U isti folder sam stavio i CelikApi.dll i CelikNET.dll
Referencirao sam CelikNET.dll.
Sve lepo radi, ali kad uradim publish na drugom racunaru ne radi i izbacuje gresku...
Pri deploymentu sam ukljucio oba dll.
Probao sam na drugom racunaru da stavim biblioteke u sistemski folder c:\windows\system32
ali mi opet izbacuje sledecu gresku:

"Could not load file or assembly 'CelikNET.dll' or one of its dependencies. The specified module could not be found."

Da li neko mozda ima ideju kako bih mogao ovo da resim?
[ Mihajlo Cvetanović @ 11.04.2014. 16:21 ] @
Možda je problem što na tom drugom računaru nisu instalirane redistributabilne biblioteke za Visual Studio 2008. To je spomenuto na sajtu MUP-a, ali bez linka. Ovo je link: http://www.microsoft.com/en-us/download/details.aspx?id=5582
[ srboljub79 @ 14.04.2014. 07:58 ] @
[ srboljub79 @ 14.04.2014. 08:05 ] @

Nije u tome problem, jer sam instalirao runtime biblioteke sa sajta

Ako imas jos neku ideju molim te posalji...

U svakom slucaju
Hvala
[ Mihajlo Cvetanović @ 14.04.2014. 10:33 ] @
Treba nam više informacija. Potrebno je da pokreneš program koji se zove Process Monitor. Taj program se inače nalazi i u kolekciji korisnih programa nazvanoj Sysinternals Suite, ali sa prvog linka može da se skine i pokrene posebno. Process Monitor prati sve što se može pratiti u sistemu (što je baš obimno), ali u našem slučaju mi samo želimo da vidimo kako to da ČeliApi ne može da se učita. Zato kad te program pita za filtere daj mu filter čiji su parametri <Path> <ends with> <celikapi.dll>. Ako sve radi kako treba u Proces Monitoru u status baru (ona najniža linija u prozoru na koju obično niko ne obraća pažnju) počeće da se brzo uvećava jedan broj. Sada pokreni svoj program do tačke kad se desi problem. Proces Monitor će prikazati nešto, i na osnovu tog nečeg možda se može izvući nekakav zaključak. Možda će i tebi biti jasnije šta se dešava.

Ako je potrebno pošalji ovde ono što Process Monitor bude ispisao. Sačuvaj sadržaj (Ctrl+S). Opcija čuvanja treba da bude "Events displayed using current filter", a format nije bitan, pa može da bude i nativni .PML. Taj fajl će nam dati više informacija.

Možda je ovo samo prvi korak, jer mi se čini da je ipak u pitanju problem sa bibliotekama. Koliko god da je koraka potrebno, moramo ih sve načiniti.
[ Mihajlo Cvetanović @ 14.04.2014. 10:38 ] @
Mala napomena: tek kad sam napisao sve ovo gore pročitao sam da se program žali da ne može da pronađe CelikNET.dll, a ne Celikapi.dll. Ako ne može da pronađe CelikNET.dll onda možda ti misliš da pokrećeš exe koji je zajedno sa CelikNET, ali zapravo ne pokrećeš taj exe nego neki drugi, u drugom folderu, koji nije zajedno sa CelikNET.dll...
[ srboljub79 @ 14.04.2014. 12:27 ] @
U folder gde je exe fajl sam snimio oba dll fajla plus neke msd...dll biblioteke koje je pomenuo u ovoj temi Blue82 kao moguce resenje(za svaki slucaj).
Sve to sam snimio i u C:\Windows\System32 i u C:\Windows\SySWoW foldere(za svaki slucaj).
Instalirao sam runtime biblioteke sa sajta.
Prilikom pokretanja aplikacije, pokrenuo sam bas taj exe koji je u istom folderu sa bibliotekama i opet izbacuje istu grešku.
Kod mene i kolege radi lepo, ali kod nas ima VS. Ja sam publish-ovao verziju, a on update-ovao. Kod mene je Windows 7 a kod njega Xp.
Na racunaru na kome treba da se koristi čitač , je Vista i sve gore pomenuto sam uradio na njemu...

Ako imas bilo kakvu novu ideju ...?

Hvala jos jednom na pomoci
[ Mihajlo Cvetanović @ 14.04.2014. 16:39 ] @
Nemam novu ideju, ali probaj da odradiš postojeću ideju, i vidi šta Process Monitor ima da kaže.
[ srboljub79 @ 15.04.2014. 09:54 ] @
Probao sam da vidim u cemu je stvar preko programa ProcessMonitor.
Ne mogu da bas protumacim po event-ima u cemu je stvar.
U arhivi greske se nalaze cetiri print screen-a
Kada se postavi za path putanja C:\....\CelikApi.dll ili C:\....\CelikNet.dll
i do pokretanja programa gde se javlja greska brojka na dnu raste,
kao i posle pokretanja forme u kojoj se javlja greska.

Hvala jos jednom na pomoci
[ srboljub79 @ 15.04.2014. 12:07 ] @
U prilogu su novi prt scr za ProcessMonitor.
U arhivi sam stavio prt scr kod mene(gde lepo radi) i na racunaru gde ne radi.
Jedino sto primecujem kao razliku je da kod mene nalazi i CelikNet i CelikApi u istom folderu(isao sam sa ends with) dok na drugom racunaru ih nalazi u razlicitim folderima.
Mozda je do toga?
[ Mihajlo Cvetanović @ 15.04.2014. 12:48 ] @
Putanje u kojima su dll-ovi su baš neobični. Guglovanjem dolazim do toga da koristiš ClickOnce tehnologiju. To je vrlo bitan podatak. Ako je to tačno onda teško da ja mogu da ti pomognem. Google je pun pitanja kako pokrenuti native dll preko ClickOnce. Da li pored CelikAPI.dll imaš i neki drugi native (ne C#) dll koji uspešno koristiš preko ClickOnce? Ako nemaš onda napravi neki mali testni C/C++ dll i probaj to da proteraš i savladaš.

Uzgred, zašto nisi po uputstvu sačuvao .PML fajlove direktno iz Proces Monitora, nego print skrinove u okviru Word i Works dokumenata? Neki podaci su isečeni iz slika.
[ srboljub79 @ 16.04.2014. 08:55 ] @

Pogledacu malo detaljnije deployment na google-u.

Nisam poslao PML fajlove jer dosta zauzimaju (13MB).

Hvala jos jednom na pomoci

[ Mihajlo Cvetanović @ 16.04.2014. 10:11 ] @
Nema na čemu. Uzgred i ja sam na početku pogrešio kad sam rekao da su za ČelikAPI potrebne CRT biblioteke za Visual Studio 2008. Potrebne su za aplikaciju Čelik, a samo za ČelikAPI nisu.

Pogledao sam i problem sa veličinom .pml fajlova, i umeju da budu veliki, ali smanje se na podnošljivu veličinu kad se isključi opcija "Also include profiling events". Moraću da saznam šta se uopšte dobija tom opcijom :)
[ Cyberghost @ 14.05.2014. 12:54 ] @
Samo da se zahvalim za odlicno odradjen posao. Biblioteka za C# u VS2010 na Windows 8.1 64bit, sve je proslo glatko iz prve.
Spašeno je nekoliko dana programiranja i cimanja da se sve portuje na C#.

Hvala, hvala jos jednom
[ Cyberghost @ 22.05.2014. 15:49 ] @
Danas sam testirao kod koji koristim za prijavu na sistem preko mticnog broja iz licne karte.

Slucajno sam izvukao licnu kartu iz citaca, program je uhvatio gresku i ispravno je pokazao, nakon ponovnog pokusaja sa ubacenom licnom kartom
prijava je prosla ali je program izbacio gresku kao sto je i kolegama u ranijim postovima.

Code:
CelikException was unhandled. EndRead nije izvrsen

Kod koristim ovako:

         try
            {
                using (CelikNET.CelikInterop oCelik = new CelikNET.CelikInterop())
                {
                    CelikNET.FixedPersonalData oFixedPersonalData = oCelik.ReadFixedPersonalData();
                    CelikNET.VariablePersonalData oVariablePersonalData = oCelik.ReadVariablePersonalData();
                    CelikNET.DocumentData oDocumentData = oCelik.ReadDocumentData();
                }
            }
             catch (CelikNET.CelikException exp)
            {
                MessageBox.Show("Neuspelo očitavanje lične karte.\nProverite da li je lična karta u čitaču i pokušajte ponovo.\nStatus greške: " + exp.EIDErrorDescriptionSr, "Greška", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }



Koristim Visual Studio 2010 i .NET Framework 4, Windows 8.1
Biblioteke msvcm90d.dll, msvcp90d.dll i msvcr90d.dll sam dodao pored CelikNET.dll ali opet isto.
Napominjem da sve radi besprekorno kada je kartica u citacu.

[ markoub @ 26.05.2014. 01:03 ] @
Prvo, puno hvala za trud, mnogo vremena stedi! :-)
Na mom racunaru radi perfektno sve, ali ni na jednom drugom nece... :-(

Prikazuje sledecu gresku:

Code:
See the end of this message for details on invoking 
just-in-time (JIT) debugging instead of this dialog box.

************** Exception Text **************
System.IO.FileNotFoundException: Could not load file or assembly 'CelikNET.dll' or one of its dependencies. The specified module could not be found.
File name: 'CelikNET.dll'
   at SmartPDF.frmMain.procitajProdavca()
   at SmartPDF.frmMain.button1_Click(Object sender, EventArgs e) in c:\Users\Marko\Documents\Visual Studio 2012\Projects\SmartPDF\SmartPDF\frmMain.cs:line 62
   at System.Windows.Forms.Control.OnClick(EventArgs e)
   at System.Windows.Forms.Button.OnClick(EventArgs e)
   at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
   at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
   at System.Windows.Forms.Control.WndProc(Message& m)
   at System.Windows.Forms.ButtonBase.WndProc(Message& m)
   at System.Windows.Forms.Button.WndProc(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

...


E, sad... Kada preimenujem (sakrijem) CelikNET fajl onda prikaze drugaciju gresku, nesto pominje neke verzije... Dakle, zna sigurno gde je fajl, ali ima neki problem.
Naravno, i CelikAPI je u istom folderu, ali nista...
Kada sakrijem CelikAPI sve je identicno, tako da imam utisak da do njega ni ne dodje.
Preciznije, kada prodjem kroz ProcessMonitor sa filterom za CelikAPI.dll nema nijedan pogodak.
Greske su tipa "file locked with only readers" (sta god to znacilo) i "buffer overflow"...

Inace, CelikNET sam iz source-a kompajlirao, pa je u 4.5 verziji framework-a.

Nadam se da ima neko resenje, ja sam sve pokusaje potrosio... :-)
[ Mihajlo Cvetanović @ 26.05.2014. 10:00 ] @
Gledajući u log fajl može se zaključiti da ti je filter bio CelikNET.dll, a ne CeliApi.dll. Bolje stavi filter da putanja sadrži reč "celik", pa nam to prosledi. I (ovo sigurno znaš, ali za svaki slučaj da napomenem) Proces Monitor mora da radi dok se greska desava.

Takođe, nije mi jasno zašto je SmartPDF proces u kome se CelikNET izvršava. To nije tvoja aplikacija, zar ne? Šta se tu dešava?
[ Mihajlo Cvetanović @ 26.05.2014. 10:30 ] @
Uzgred, osnovni problem sa kombinovanjem .NET i native biblioteka je to što native biblioteke nisu u putanji. Programeri misle da je dovoljno da native dll stave u isti folder u kome je i .NET dll, ali to tako ne radi. Native dll mora da stoji ili u folderu u kome je aplikacija (.exe), ili u putanji (PATH). Neki ljudi iskopiraju native dll u system32 (ili syswow64) folder, ali to je pogrešno, jer taj folder ne pripada korisnicima nego Mikrosoftu. Ako je instalacija aplikacije pod vašom kontrolom onda stavite dll u folder gde je exe. Ako exe nije pod vašom kontrolom (na primer pravite web servis za IIS) onda proširite PATH novim folderom, u kojem će stajati native dll.
[ markoub @ 26.05.2014. 12:31 ] @
Napisah u poruci, ali sad vidim da sam to mogao i malo jasnije... :-)

Dakle, kada prodjem sa filterom "celikapi.dll" nemam nijedan pogodak. Tako da zakljucujem da do njega uopste ne stize.
Kada prodjem sa celiknet.dll onda dobijem ovo sto sam zakacio.
Filter koji samo sadrzi "celik" daje isto sto i "celiknet.dll", ocekivano.
A SmartPDF jeste moja aplikacija, koja cita saobracajne dozvole (uspesno) i licne karte (kao sto rekoh da develop masini uspesno inace ne) i popunjava raznorazne obrasce, pravi pdf-ove uz pomoc podataka sa Smart kartica, otud moje kreativno ime!:-)

Oba dll-a su mi u istom folderu sa .exe-om. kopirao sam ih i u sistemske foldere, mada sam i ranije znao da ce to tesko pomoci... :-)
Jos jedna stvar od koje ludim je sto pregledam spisak instaliranih programa na masinama, i sto se tice redistributable paketa skroz je identicna stvar na svim, pa mi nista nije jasno.
Drugu biblioteku (eVehicleRegistration, ili tako nesto, za citanje saobracajnih) sam sredio, ona je COM, tako da cim sam je registrovao na drugoj masini proradila je.

Ali od ovog poludeh.
Pored ovih, koristim i jos jedan dll, PdfSharp, koji normalno radi, sam se lepo kopira i sve je kako treba.
Naravno, postavljeno mi je za CelikNET referencu opcija "CopyLocal", tako da ako ovde niko nema ideju preostaje mi samo da poludim!:-)
[ Mihajlo Cvetanović @ 26.05.2014. 18:19 ] @
Možda bi bilo dobro da uključiš Fusion logove. Evo članka koji opisuje šta i kako u vezi s tim: http://www.hanselman.com/blog/...oDebugObscureLoaderErrors.aspx

U ovom članku je i link na MSDN, http://msdn.microsoft.com/en-us/library/e74a18c4.aspx

Uključi to, pa da vidimo na šta se konkretno .NET žali.
[ markoub @ 31.05.2014. 10:59 ] @
Evo iz Fusion-a...
Ovo je bio jedini vezan za CelikNet.dll, pobrisao sam sve pre sto se desilo pre ucitavanja ovog problematicnog. Opet se nigde ne pominje CelikAPI.dll, ni ne stigne do njega...

Code:
<meta http-equiv="Content-Type" content="charset=unicode-1-1-utf-8"><!-- saved from url=(0015)assemblybinder: --><html><pre>
*** Assembly Binder Log Entry  (5/31/2014 @ 11:55:05 AM) ***

The operation was successful.
Bind result: hr = 0x0. The operation completed successfully.

Assembly manager loaded from:  C:\Windows\Microsoft.NET\Framework\v4.0.30319\clr.dll
Running under executable  C:\Users\Marko\Desktop\Release\SmartPDF.exe
--- A detailed error log follows. 

=== Pre-bind state information ===
LOG: DisplayName = CelikNET, Version=1.0.5257.27699, Culture=neutral, PublicKeyToken=null
 (Fully-specified)
LOG: Appbase = file:///C:/Users/Marko/Desktop/Release/
LOG: Initial PrivatePath = NULL
LOG: Dynamic Base = NULL
LOG: Cache Base = NULL
LOG: AppName = SmartPDF.exe
Calling assembly : SmartPDF, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null.
===
LOG: This bind starts in default load context.
LOG: Using application configuration file: C:\Users\Marko\Desktop\Release\SmartPDF.exe.Config
LOG: Using host configuration file: 
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config.
LOG: Policy not being applied to reference at this time (private, custom, partial, or location-based assembly bind).
LOG: Attempting download of new URL file:///C:/Users/Marko/Desktop/Release/CelikNET.DLL.
LOG: Assembly download was successful. Attempting setup of file: C:\Users\Marko\Desktop\Release\CelikNET.dll
LOG: Entering run-from-source setup phase.
LOG: Assembly Name is: CelikNET, Version=1.0.3987.22185, Culture=neutral, PublicKeyToken=null
LOG: Binding succeeds. Returns assembly from C:\Users\Marko\Desktop\Release\CelikNET.dll.
LOG: Assembly is loaded in default load context.

</pre></html>


[ markoub @ 31.05.2014. 11:13 ] @
Imam i velikih problema sa spustanjem verzije zahtevanog .NET frameworka, jer 4.5 ne postoji za XP, a vec 4.0 pravi probleme...
Nekako sam uspeo jednom, ali sada ponovo nece... Kada ukljucim CelikNET u reference kaze da "could not be resolved because it was built against the 4.5". I to koristim onaj CelikNET.dll iz binarne verzije sa ove teme, ne iz source koju ja ovde kompajliram u 4.5. :-(

EDIT:
Ovo sam nekako uspeo. Uspeo sam da kompajliram za stariju verziju i bio je problem sto moram da se ocisti build folder, jer nece da iskopira novi CelikNET ako je tu vec prisutan stari. Uglavnom, to sam resio, ali ostatak nikako...

[Ovu poruku je menjao markoub dana 31.05.2014. u 12:31 GMT+1]
[ Mihajlo Cvetanović @ 01.06.2014. 21:05 ] @
Fusion log kaže da je CelikNET učitan, a sam program kaže da nije? To prevazilazi moje znanje. Ne znam, možda se više informacija krije u InnerException od exceptiona koji si napisao u prvoj poruci. Možda neko drugi ima neku drugu ideju...
[ nneexx @ 01.09.2014. 14:25 ] @
Meni isto ovo treba za Alasku xbase++

Da li je neko resavao problem za ovaj programski jezik ?

Pozdrav.
[ MACTEPx @ 01.09.2014. 15:23 ] @
Objavljena je nova verzija api-ja sa kojom ovaj wrapper ne radi:
celik api
[ Mihajlo Cvetanović @ 01.09.2014. 16:19 ] @
Tako je. Povećala su se neka polja i dodata su neka nova, čitanje sertifikata i promena lozinke (za sada) ne rade za novu ličnu kartu, ali i dalje rade za staru, i za novu ličnu kartu ne postoj verifikacija bloka portreta, nego se verifikacija portreda radi zajedno sa preostalim nepromenljivim podacima. Funkcija EidBeginRead daje informaciju koji je tip lične karte u pitanju, pa algoritam treba tu informaciju da uzme u obzir.
[ Mihajlo Cvetanović @ 18.09.2014. 14:13 ] @
Novi Čelik API nije kompatibilan sa starim Čelik NET-om, i potrebno je doraditi Čelik NET da bi mogao da koristi novi Čelik API. Olakšavajuća okolnost je što postojeći Čelik NET projekat dolazi sa verzijom Čelik API-ja 1.0.2.1. Tu čak nema ni verifikacije iz verzije 1.1. Zbog toga dorade se svode na uvođenje novih fajlova u folder CelikAPI u projektu CelikNET. Novi fajlovi su dati na stranici MUP-a http://ca.mup.gov.rs/CelikApi%20Windows%201.2.zip . Posle toga u fajlu CelikNET.cpp u liniji 163 promeniti EidStartup(1) u EidStartup(2). Posle toga rebildovati CelikNET.

Da bi se uvela i verifikacija blokova potrebno je dodati nove funkcije u CelikNET.
[ savab @ 04.03.2015. 09:51 ] @
Pozdrav svima.

Ako nekome treba kod za C# napravio sam test konzolni program koji cita podatke i pretvara ih sve u latinicu.
Sve radi sa novom i starom verzijom licne karte i moze se upotrebiti za win programe.

Pozdrav.
[ Mihajlo Cvetanović @ 06.03.2015. 13:52 ] @
Postoje neki detalji kod konvertovanja ličnih imena iz ćirilice u latinicu, o kojima treba povesti računa. Prvo, slova naše ćirilice nisu jedina koja mogu da se pojave u imenu. Da li će program znati da kovertuje Ѓ i Ќ u latinicu? Drugo, proces romanizacije (kako se zove ovaj vid koverzije, transliteracija u latinicu) može da se razlikuje od jednog jezika do drugog. U srpskom jeziku Ѓopѓe bi se konvertovalo u Đorđe, ali sami Makedonci bi možda više voleli da se kovertuje u Gjorgje.

Ako neko želi da dobro pokrije sve slučajeve mora da povede računa i o ovakvim detaljima.
[ cubbe04 @ 30.10.2015. 13:13 ] @
Citat:
savab:
Pozdrav svima.

Ako nekome treba kod za C# napravio sam test konzolni program koji cita podatke i pretvara ih sve u latinicu.
Sve radi sa novom i starom verzijom licne karte i moze se upotrebiti za win programe.

Pozdrav.



Zdravo,

Da li bi mogao/la da mi prosledis ovu verziju aplikacije ? :)


Da li neko ima mozda verziju aplikacije u C# koja cita i nove i stare licne karte ?
[ acewarrior97 @ 02.02.2016. 20:39 ] @
Pozdrav svima, je l ima neko interop wrapper za C# za novu verziju API-a? Pokusao sam nesto da napravim ali mi izbacuje General Error, nisam bas iskusan s DLLovima ali recimo ovaj winscard.dll wrapper mi okej radi. Znam da moram Maršalovanje da radim. Bilo bi okej da se javi kreator ove teme.
Ja se nadam da neko ima ažuriran ovaj CelikNET ili neki wrapper.
Na linku je ono što sam uradio do sada.
CelikC# Wrapper pokusaj

Hvala unapred :D
[ Mihajlo Cvetanović @ 02.02.2016. 21:30 ] @
Ako koristiš postojeći CelikNET, sa izmenama koje su navedene nekoliko poruka iznad onda bi to trebalo da ti radi (čitanje podataka, bez verifikacije) bez potrebe za tvojim ličnim wrapperom. Nema ažuriran CelikNET, ali imaš sve što je potrebno da ga sam ažuriraš.
[ pseudo_programer @ 16.03.2016. 18:49 ] @
Pozdrav svima. Imam Windows 10, VS 2015 i limitirano znanje iz programiranja. Deć 3 dana čitam ovu temu i unapred i unazad . Stigao sam do kraja svojih ideja i mogućnosti. Kako da okačim kod da mi neko da uputstva gde grešim i šta da radim?
[ Mihajlo Cvetanović @ 17.03.2016. 00:15 ] @
Možeš odgovarajuće delove koda da postaviš direktno u poruku, a možeš i poruci da pridodaš fajlove (ako ih ima više onda je možda bolje jedan .zip). Obrati pažnju na dugmiće tik ispod poruke. Treba ti onaj na kome piše "Upload uz poruku".
[ pseudo_programer @ 17.03.2016. 00:24 ] @
Evo, da pokušam:
[ pseudo_programer @ 17.03.2016. 00:28 ] @
Ne mogu da se uklopim u 1024k. Kako da Ti dostavim projekat?
[ Mihajlo Cvetanović @ 17.03.2016. 09:43 ] @
Kakav to početnički projekat ima više od jednog megabajta zipovanog sorsa? U zip treba da idu samo sors fajlovi (.cs), a ne i rezultat bildovanja (bilo šta u \bin folderu). Ne samo da treba da pošalješ samo sors, nego i taj sors treba da bude minimalan. Izvuci samo ono što je bitno za problem koji imaš. Napravi novi minimalni projekat u kojem se vidi problem, i zipuj samo sors od toga.

Naravno, lepo bi bilo i da opišeš šta se tačno dešava. Pogledaj kako drugi ljudi ovde traže pomoć za svoje probleme. Svi opišu svojim rečima problem. Tako treba i ti da radiš.
[ pseudo_programer @ 17.03.2016. 14:34 ] @
Mislim da je osnovni problem u Solution platforms.
Menjao sam platforme, pa bildovao. Sad neće više da ga bilduje.
Greška koju javlja je:
An unhandled exception of type 'System.BadImageFormatException' occurred in System.Windows.Forms.dll

Additional information: Could not load file or assembly 'CelikNET.dll' or one of its dependencies. is not a valid Win32 application. (Exception from HRESULT: 0x800700C1)
Klijentski projekat treba samo da pokupi podatke u string i prikaže ga u MsgBox-u.
[ Cyberghost @ 17.03.2016. 14:43 ] @
Hmmm ja bih rado pomogao ali ne radim C++ a ovo i nije tema o C++ već o wrapper-u oko izvorne C++ biblioteke.
[ pseudo_programer @ 18.03.2016. 00:08 ] @
Ponovo sam pročitao ovu i još dve teme. Zatim sam krenuo sve iz početka. Svašta sam usput naučio.
Konačno radi.
[ pseudo_programer @ 18.03.2016. 20:06 ] @
Novi dan, novi problem. Imam VB formu sa jednim dugmetom i sledećim kodom:

Public Class Form1

Dim CitacLK As CelikNET.CelikInterop

Private Sub btnCelik_Click(sender As Object, e As EventArgs) Handles btnCelik.Click

CitacLK = New CelikNET.CelikInterop
'Attribute ReaderEngine.VB_VarHelpID = -1

Dim strFinal As String
Dim a = CitacLK.ReadDocumentData
Dim b = CitacLK.ReadFixedPersonalData
Dim c = CitacLK.ReadVariablePersonalData

strFinal = ""
strFinal = strFinal & "Reg. broj: " & a.docRegNo & vbCrLf
strFinal = strFinal & "Izdao: " & a.issuingAuthority & vbCrLf
strFinal = strFinal & "Izdana dana: " & a.issuingDate & vbCrLf
strFinal = strFinal & "Istice: " & a.expiryDate & vbCrLf

strFinal = strFinal & "Prezime: " & b.surname & vbCrLf
strFinal = strFinal & "Ime: " & b.givenName & vbCrLf
strFinal = strFinal & "Ime roditelja: " & b.parentGivenName & vbCrLf
strFinal = strFinal & "Datum rodjenja: " & b.dateOfBirth & vbCrLf
strFinal = strFinal & "Mesto rodjenja: " & b.placeOfBirth & vbCrLf
strFinal = strFinal & "Opstina rodjenja: " & b.communityOfBirth & vbCrLf
strFinal = strFinal & "Drzava rodjenja: " & b.stateOfBirth & vbCrLf
strFinal = strFinal & "JMBG: " & b.personalNumber & vbCrLf
strFinal = strFinal & "Pol: " & b.sex & vbCrLf

strFinal = strFinal & "Drzava: " & c.state & vbCrLf
strFinal = strFinal & "Opstina stanovanja: " & c.community & vbCrLf
strFinal = strFinal & "Mesto: " & c.place & vbCrLf
strFinal = strFinal & "Ulica: " & c.street & vbCrLf
strFinal = strFinal & "Broj: " & c.houseNumber & vbCrLf
strFinal = strFinal & "Slovo: " & c.houseLetter & vbCrLf
strFinal = strFinal & "Ulaz: " & c.entrance & vbCrLf
strFinal = strFinal & "Broj stana: " & c.apartmentNumber & vbCrLf
strFinal = strFinal & "Sprat: " & c.floor & vbCrLf

CitacLK = Nothing
MsgBox(strFinal)
End Sub

Private Sub Form1_Closing(sender As Object, e As CancelEventArgs) Handles Me.Closing

End Sub
End Class

Pokrenem program, stavim LK u čitač, očitam podatke, sve OK. Stavim drugu LK i dobijem podatke iz prve LK. Kako da pozovem BeginRead i EndRead funkcije?
[ Mihajlo Cvetanović @ 20.03.2016. 23:43 ] @
Kao što u C# treba koristiti using u VB treba koristiti Using. https://msdn.microsoft.com/en-us/library/htd05whh.aspx

BeginRead se poziva unutar konstruktora CelikNET.CelikInterop. EndRead se poziva po izlasku iz Using bloka. Postoji i opcija ako ne želiš da koristiš Using, i to je objašnjeno na linku, ali velike su šanse da želiš.
[ pseudo_programer @ 21.03.2016. 10:15 ] @
Umesto:

CitacLK = Nothing

stavio:

CitacLK.Dispose()

i sve radi. Imam još samo kedan problem: instalacija. Napravim instalaciju koja radi samo na mom računaru. Na ostalim mašinama, kad pritisnem btnCelik javi: "Could not load file or assembly CelikNET.dll or one of its dependeces. The specified module could not be found." U folderu u kome je exe nalaze se i CelikNET.dll i CelikApi.dll. Taj folder je u path-u. Dll-ove sam iskopirao i u System32 i u SysWOW64 foldere, ali ne vredi. Šta je lek?
[ Mihajlo Cvetanović @ 21.03.2016. 10:58 ] @
Upozorenje: ako ručno koristiš Dispose() onda treba da ga koristiš onako kako je propisano u linku koji sam dao u prethodnoj poruci. Postoji razlog zašto se tako radi. Poenta je međutim da ljudi treba da koriste Using, jer je tako istovremeno i lakše za programiranje i pravilno za izvršavanje. Elem, ako se desi neki exception (a desiće se; Marfijev zakon kaže da se uvek desi nešto nepredviđeno) pre tvog ručnog poziva Dispose() onda se taj Dispose() neće pozvati i imaćeš problem koji si i ranije imao, da se "čita" prethodna lična karta. To je loše programiranje.

Bolje se navikni na dobro programiranje sada, a ne kasnije, kad moraš prvo da se odvikavaš od lošeg. Koristi Using.

Što se tiče putanje do .dll fajla nekoliko ljudi je na ovoj temi već imalo slične probleme, pa pogledaj, možda pomogne. Po tvom opisu ispada da je u pitanju nešto što nikad do sad nisam susreo, ili je možda isto ono što je i korisnik markoub imao, ali to je bila neka misterija, a taj korisik se nije posle javio sa svojim rešenjem, ako je rešenja i bilo.

Moguće je da bilduješ 64-bitnu verziju svoje aplikacije, a koristiš 32-bitnu verziju CelikApi-ja. Na 64-bitnom Windowsu C:\Windows\System32 je za 64-bitne dll-ove, a SysWOW64 je za 32-bitne. Arhitekture svih modula u procesu moraju da se poklapaju.
[ teofil013 @ 23.03.2016. 18:35 ] @
Pokušavam u C# program da implementiram očitavanje LK preko CelikNET.dll i imam silne probleme.
Prepravio sam EidStartup(2) (bez toga ništa nije radilo) i prebacio target na .net 4.5.1
u programu pozivam

using (CelikNET.CelikInterop x = new CelikNET.CelikInterop())
{

CelikNET.FixedPersonalData d1 = x.ReadFixedPersonalData();
CelikNET.VariablePersonalData d2 = x.ReadVariablePersonalData();
CelikNET.DocumentData d3 = x.ReadDocumentData();
Ime = d1.givenName
Prezime = d1.surname
.....
}


i sada sve radi pri prvom startovanju i ako je kartica unutra,
ali kad kartica nije u čitaču dobijam exception koji ne mogu da zaobiđem sa praznim catch{}

Ima li neko ideju?


(izmena zbog slučajno pritisnutog send)
[ Vreljanski Milan @ 30.08.2016. 12:25 ] @
Aj da bampujem i updejtujem post.

Dobih juce task da citac prilagodim novim lk, nije radio. Imamo program radi i saobracajnu i lk.

Hvala prvo na wrapperu. izmenjeno je sve sto treba i to sljaka. Sjajan posao i dobra riznica znanja. ES!

@teofil

ako si vec uzeo celikNET source, i prekompajlirao novi dll, trebalo bi da mozesh da resish, taj detalj u C projektu celik NET.

kod mene je to otprilike ovako uradjeno u aplikaciji koja referencira celikNET

Dim d1 As CelikNET.FixedPersonalData = x.ReadFixedPersonalData()
If d1.personalNumber.Length = 0 Then
// nema kartice

tako nekako mozesh valjda i na timer, ne znam sad su mi iskljuceni timeri, secam se da sam imao i neku opstu gresku, a to je kad nema kartice a timer vrti.

poz, ako treba nesto javljajte.

takodje... ja sam iskoristio 1.2.1 ili 1.2.2 API sa sajta mupa. Izashao je i 1.2.3 sto je poslednja verzija.

poz.

P.S. Evo npr sta se nama desilo, znaci nije problem u wrapperu, ali jeste da kazem logicki.

Naime ista forma cita i saobracajne i licne.

preko iste procedure.


[Ovu poruku je menjao Vreljanski Milan dana 30.08.2016. u 15:54 GMT+1]
[ LazaBre @ 05.10.2016. 12:27 ] @
Pozdrav drugai,
da li je ko uspeo da napravi VB.net Applikaciju kroz NetFrameWork 4+, ja sam pokushao apsolutno sve varijante pa i kroz NET FrameWrok3 i 3.5, konstantno mi se vraca da mi fali CelnikAPI (koji sam dodao i u rootu exe applikacije kao i u System32 i syswow...)
Da li neko uopste ima resen CelikNET i CelinAPI koji radi vb.net-u?

Pozdrav:)
[ dusans @ 05.10.2016. 13:14 ] @
A šta se dešava kada kompajliraš kao x86 (32-bit) umesto AnyCPU?
[ LazaBre @ 06.10.2016. 08:09 ] @
Probao sam, i na 32Bitnom winu da startujem i na 64bitno, u svim mogucim varijantama, i da buldiujem i jednu i drugu arh..ali nikako da proradi.. :( Ne znam vise sa da probam :P
[ Mihajlo Cvetanović @ 08.10.2016. 09:46 ] @
Čovek te pita za AnyCPU. Da li si postavio projekat da ne bude AnyCPU nego x86?

Takođe, da li si CelikNET dodao kao projekat, ili samo kao dll? Možda bi pomoglo da se doda kao projekat, i da "target framework" bude isti u tvom projektu i u CelikNET.

Takođe, odakle si preuzeo Celik API? Uzmi najnoviju verziju sa sajta MUP-a.
[ LazaBre @ 08.10.2016. 16:26 ] @
Izvinjvam se na glupom odgovoru, kada sam napisao da sam probao da bildujem za obe arh, mislio sam da se podrazumeva da jesam probao da postavim da bude i x64 i x86, sto se tice CelikApi postavljao sam ga samo kao DLL i pokusao sam varijante i sa MUPovog sajta kao i iz rar arhive koju sam preuzeo sa ES-a. Ne zna gde gresim ali nikako da mi proradi :P Hvala na svakoj pomoci.
[ Mihajlo Cvetanović @ 09.10.2016. 00:27 ] @
Da li praviš desktop app ili Windows Store app?

Probaj da napraviš najprostiji konzolni projekat, i u njemu pročitaš ličnu kartu preko CelikNET-a.

Probaj da pozoveš neku funkciju iz nekog sistemskog dll-a, recimo funkciju Sleep iz kernel32.dll. Ako to radi onda mora i CelikApi.dll da radi, ako je bilo gde u PATH putanji.
[ LazaBre @ 11.10.2016. 11:23 ] @
Pokusavam da napravim APP za desktop tj Windows, jos se slabo snalazim, nikako da se malo pokrene da proradi da namestim... :P
Trudim se...Moram da postavim jedno glupo pitanje...Ako je Windows 64BIT - CelikAPI 32Bit-a ide u System32/syswow64/ , a CelikAPI 64Bita ide normalno u System32/?

Pozz
[ Mihajlo Cvetanović @ 11.10.2016. 13:15 ] @
Tako je. Ali probaj da pozoveš neku funkciju iz neke druge sistemske biblioteke, čisto da utvrdiš da to uopšte može.

Takođe, nije neophodno da CelikAPI.dll stoji bilo gde u windows folderima (Mikrosoft ne voli da ljudi to rade, jer Windows folder oni kontrolišu, i "njihov" je). CelikAPI.dll može da stoji i na nekom svom mestu, ali to mesto samo mora da se doda u PATH.

Probaj da uradiš predlog iz moje prethodne poruke.
[ JUDO_BLACK_BOY @ 24.10.2016. 12:49 ] @
Pozdrav svima!
Znam da je tema zapoceta jako davno ali ja sad radim na jednom programu u kome zelim da ocitam nekoliko podataka sa licne karte(5,6 svega)
Citam ovu temu vec 5,6 dana ali i dalje cupkam u mestu...
Konkretno moj problem su 2 greske:

BeginRead nije izvrsen
ReadDocumentData nije izvrsen

ReadDocumentData je trenutni problem, beginread mi se ne pojavljuje trenutno

ako neko ima volje da mi pregleda kod bicu jako zahvalan.

Using x As New CelikNET.CelikInterop()

'Podaci o ličnoj karti

Dim d1 As CelikNET.DocumentData

d1 = x.ReadDocumentData ' < ----Greska se javlja u ovom redu, jos uvek nisam krenuo dole.


TextBox1.Text = d1.docRegNo

End Using



greska:
MsgBox(Err.Description)
End Sub

[ pseudo_programer @ 24.10.2016. 21:40 ] @
U prilogu Vam šaljem rešenje prerađeno iz C# u VB.NET. Kod pozivate na sledeći način:

Dim CitacLK As BasCelik.CelikAPI
Dim Citac As BasCelik.SmartCardManager
Dim Ime As String
Dim strPodbroj As String

Citac = New BasCelik.SmartCardManager
Ime = Citac.GetReaders(0)
CitacLK = New BasCelik.CelikAPI

Naravno,na kraju ide:

CitacLK.Dispose()

Nadam se da sam pomogao.
[ JUDO_BLACK_BOY @ 26.10.2016. 12:50 ] @
Hvala vam puno!!!!

Danas krecem da radim na tome pa javljam ishod.
[ JUDO_BLACK_BOY @ 26.10.2016. 18:31 ] @
Uspeo sam!!!

HVALA PUNO!!!


[Ovu poruku je menjao JUDO_BLACK_BOY dana 26.10.2016. u 21:27 GMT+1]
[ Mihajlo Cvetanović @ 26.10.2016. 22:42 ] @
Da li radi čitanje kartice iz samog Čelika? Da li radi čitanje iz tvog koda ako svom kodu podmetneš Čelik API koji dolazi uz instalaciju Čelika?
[ shimesrle @ 27.10.2016. 13:16 ] @
@pseudo programer

Meni sve radi sa vašim apijem ail ne čita podatke sa kartice (svi podaci su prazni).
Da li možete da pošaljete ceo projekat?

Pozdrav
[ shimesrle @ 27.10.2016. 13:43 ] @
Rešio problem.
[ Mihajlo Cvetanović @ 28.10.2016. 09:28 ] @
Bilo bi lepo kad bi oni koji reše svoj problem ukratko napisali ovde prirodu problema i kako je rešen, tako da budući posetioci sa istim problemom ne moraju da se cimaju i troše vreme. Nije važno ako je problem "glup", ili ako nema direktne veze sa CelikNET bibliotekom i projektom. I dalje može da se desi da neko drugi ima sličan problem, i dođe ovde po pomoć.
[ JUDO_BLACK_BOY @ 29.10.2016. 08:13 ] @
Dim CitacLK As BasCelik.CelikAPI
Dim Citac As BasCelik.SmartCardManager
Dim Ime As String
Dim strPodbroj As String
CitacLK.read() '<=================PROBLEM JE BIO OVDE treba pozvati read opciju.
Citac = New BasCelik.SmartCardManager
Ime = Citac.GetReaders(0)
CitacLK = New BasCelik.CelikAPI

Naravno,na kraju ide:

CitacLK.Dispose()
[ zoki9707 @ 20.07.2017. 07:54 ] @
Da li neko ima CelikNet API za VS 2015 ?

Probao sam sve verzije, ali mi ni jedna ne radi.
[ Mihajlo Cvetanović @ 24.07.2017. 14:57 ] @
Najbolje je možda da lično bilduješ biblioteku koristeći projekat dat u prvoj poruci na ovoj temi (fajl CelikNET-Source2.zip - 383.18k) i uz izmene navedene u poruci od 18.9.2014. U toj poruci spominje se .zip fajl sa sajta MUP-a, ali je dat link ka staroj verziji. Najnovija verzija Celik API-a na MUP-ovom sajtu je v1.2.3, i dolazi u obe arhitekture, 32-bitnoj i 64-bitnoj. Moraćeš u tvom .NET projektu da se opredeliš za jednu od ove dve arhitekture (ne može da bude "Any CPU" zbog Celik API dll-a).

Ima i na GitHubu neki CelikNET projekat, ali nešto mi je sumnjivo u tom projektu. Nisam 100% siguran da radi kako treba. Dva različita projekta se zovu CelikNET, što verovatno nekima unosi zabunu.
[ mmix @ 24.07.2017. 15:50 ] @
Mozda je vreme da tuzim nekog za brand violation Kad moze Ubuntu

A mozda je i vreme da ponovo pretresem projekat i napravim sopstveni fork... Videcemo.
[ zoki9707 @ 25.07.2017. 14:11 ] @
Pratio sam uputstvo medjutim test apliacija ne moze da pozove CelikNET.dll a greska je:

An unhandled exception of type 'System.IO.FileNotFoundException' occurred in mscorlib.dll
Additional information: Could not load file or assembly 'CelikNET.dll' or one of its dependencies. The specified module could not be found.

Attachovacu source code koji sam napravio za VS 2015 Net Framework 4, pa ako moze neko neka pomogne.

Hvala.
[ Cyberghost @ 25.07.2017. 14:45 ] @
Code:

System.IO.FileNotFoundException


Neki fajl koji mu treba nije na traženoj putanji. Nemam C++ na sistemu ne mogu da pokrenem projekat. Ali greška je krajnje jednostavna.
[ zoki9707 @ 26.07.2017. 07:34 ] @
Kompajliranje u VS 2015 prolazi bez problema (za CelikNET i Konzolnu aplikaciju koju koristim da pročitam podatke), ali kada pokrenem program javlja se ova greška.
Kad skinem referencu na CelikNET.dll program ne javlja grešku, a kad stavim referencu na CelikNET.dll javlja tu grešku.

Zato sam i stavio source code u poruci.
[ ravni @ 31.07.2017. 09:00 ] @
Citat:
Mihajlo Cvetanović:
Najbolje je možda da lično bilduješ biblioteku koristeći projekat dat u prvoj poruci na ovoj temi (fajl CelikNET-Source2.zip - 383.18k) i uz izmene navedene u poruci od 18.9.2014. U toj poruci spominje se .zip fajl sa sajta MUP-a, ali je dat link ka staroj verziji. Najnovija verzija Celik API-a na MUP-ovom sajtu je v1.2.3, i dolazi u obe arhitekture...
Velika je steta da se ovaj zaista koristan projekat ovako komplikovano koristi.
[ tresnjic @ 08.07.2018. 18:18 ] @
Da li mozes da mi prosledis kod za C#, i hoce li raditi sa Visual Studiom 2015? Hvala.
[ tresnjic @ 08.07.2018. 18:21 ] @
Citat:
savab:
Pozdrav svima.

Ako nekome treba kod za C# napravio sam test konzolni program koji cita podatke i pretvara ih sve u latinicu.
Sve radi sa novom i starom verzijom licne karte i moze se upotrebiti za win programe.

Pozdrav.



Da li mozes da mi prosledis kod za C#, i hoce li raditi sa Visual Studiom 2015? Hvala.
[ HSerZile @ 25.02.2019. 22:50 ] @
Pozdrav svima..Interesuje me da li je neko imao iskustva sa integracijom na neki nacin ovog citaca za androide aplikacije, xamarin recimo i na koji nacin je uspeo da poveze?
Hvala.
[ SAFF @ 16.03.2020. 19:24 ] @
Citat:
tresnjic:

Da li mozes da mi prosledis kod za C#, i hoce li raditi sa Visual Studiom 2019? Hvala.

[ nesomis @ 23.05.2020. 20:59 ] @
Da li neko ima dobru volju da se poveže na moj komp i pomogne mi da sve postavim da radi?
Izgubio sam mnogo vremena i vratio sam se na sami početak po ko zna koji put. Napravio sam nekoliko virtualnih mašina u raznim kombinacijama OS-a i VS-a i ni u jednoj kombinaciji nisam uspeo da pokrenem aplikaciju. Ne razumem gde grešim. Pročitao sam svaki post po 20 i više puta. Pročitao sam stonine postova na forumima i na kraju sam napravio toliku zbrku u glavi da sam prinuđen da tražim pomoć eksperata.

Molim da mi neko pomogne.
[ bokinet @ 24.05.2020. 08:00 ] @
@nesomis
Sta je sporno? U cemu se sastoji problem?
Pre svega, da li MUP Celik app radi na vasem racunaru?
[ nesomis @ 24.05.2020. 12:30 ] @
Citat:
bokinet: @nesomis
Sta je sporno? U cemu se sastoji problem?
Pre svega, da li MUP Celik app radi na vasem racunaru?


@bokinet
Sporno je to što ne mogu da koristim CelikNET ni na jednoj mašini ma koji OS ili VS imao. Verovatno negde grešim u koracima i više ne znam šta da radim. Ukoliko ste raspoloženi da pomognete pošaljite mi privatnu poruku pa da se dogovorimo kada možete da se povežete i pogledate sami kako stvari stoje. Pokazaću Vam šta sam sve pokušavao.

Ono što meni treba je mogućnost iščitavanja ličnih karata u C# i VB preko najnovijeg CelikAPI-ja.
[ nesomis @ 25.05.2020. 20:31 ] @
Moram da se zahvalim bokinetu na nesebičnoj pomoći, odvojenom vremenu i rešenju koje mi je prosledio, a koje ću moći da iskoristim u svom projektu.
Ja ću nastaviti da istražujem dalje. Čim dođem do svog rešenja za koje mislim da mi je pred nosom, podeliću ga svima koji budu zaintersovani za njega.
[ andrija032 @ 03.06.2020. 10:22 ] @
Pokusavam već nekoliko dana da pokrenem Windows aplikaciju u kojoj zelim da citam licnu kartu i svaki put kad probam pa procitam licnu kartu, dobijam sledecu gresku:

Could not load file or assembly 'CelikNET.dll' or one of its dependencies. is not a valid Win32 application.

Probao sam na nekoliko racunara i nista.

Da li bi neko mogao da mi pomogne, koristim VS 2017

Pozdrav.
[ Mihajlo Cvetanović @ 04.06.2020. 10:03 ] @
Postoje tu dva dll-a, jedan je CelikApi.dll u kome je sva funkcionalnost, a drugi je CelikNET.dll koji olakšava korišćenje ovog prvog u .NET aplikacijama. Taj CelikApi.dll mora da stoji na sistemskoj putanji. Ta putanja je PATH variabla, ako si nekad čuo za to. Neki vole da iskopiraju CelikApi.dll u C:\Windows\System32 folder, ali Mikrosoft to ne preporučuje.

Preporučeni način je da iskopiraš fajl negde u C:\Program Files, recimo u folder C:\Program Files\Common Files\andrija032. I onda taj folder dodaš u PATH (idi u Control Panel\All Control Panel Items\System, klikni na Advanced system settings, u novom prozoru u tabu Advanced klikni na Environment Variables, odaberi variablu Path, klikni Edit, i dodaj putanju do željenog foldera (putanje su međusobno razdvojene znakom tačka-zarez (;)).
[ andrija032 @ 04.06.2020. 10:21 ] @
>
[ nesomis @ 05.06.2020. 00:52 ] @
Novi dan, novi problem.

1. Preuzeo sam Source fajl iz prvog posta i nisam menjao ništa u kodu i nisam menjao verziju CelikAPI-ja. Znači sve je ostalo
2. Napravio sam folder na c disku i dodao putanju u Environment Variables i restartovao komp da bi putanja bila vidljiva operativnom sistemu. U ovaj folder sam smestio CelikAPI.dll i CelikNet.dll
3. U VS 2019 sam pokrenuo projekat i retargetirao ga na ( Windows SDK Version 10.0 )
4. Ostavio sam .NET Framework na V4.0
5. CelikNet na platormi Win32
6. ConsoleTester na platformi x86
7. Solution na platformi x86
8. Kada pokrenem aplikaciju na konzoli se ispiše "Podaci o licnoj karti ---------------------------------" i dolazi do prekida sa greškom CelikNET.CelikException: 'ReadDocumentData nije izvrsen'

Šta dalje?

[ Mihajlo Cvetanović @ 05.06.2020. 11:16 ] @
Pokaži nam svoj kod. Uzgred, nadam se da si u projekat iz prve strane topika implementirao i izmene napisane u postu od 18.09.2014.
[ nesomis @ 05.06.2020. 19:33 ] @
Evo koda za CelikNET. Promenjena je samo 163 linija

Code:
/*  
    This file is part of CelikNET.

    CelikNET is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

    CelikNET is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License along with CelikNET.  If not, see <http://www.gnu.org/licenses/>.
*/

#include "StdAfx.h"

#pragma once

using namespace System;
using namespace System::Text;
using namespace System::Drawing;
using namespace System::IO;
using namespace System::Runtime::InteropServices;

namespace CelikNET {

    public ref class CelikException sealed: Exception 
    {
    public: 
        CelikException(String^ message, int ErrorCode): Exception(message), _EIDErrorCode(ErrorCode) {}
        property int EIDErrorCode { int get() { return _EIDErrorCode; }; }
        property String^ EIDErrorDescriptionEn { 
            String^ get() 
            {
                switch(EIDErrorCode) 
                {
                    case EID_OK: return "Operation completed succesfully"; 
                    case EID_E_GENERAL_ERROR: return "General error";
                    case EID_E_INVALID_PARAMETER: return "Invalid parameter";
                    case EID_E_VERSION_NOT_SUPPORTED: return "Version not supported";
                    case EID_E_NOT_INITIALIZED: return "Not initialized";
                    case EID_E_UNABLE_TO_EXECUTE: return "Unable to execute";
                    case EID_E_READER_ERROR: return "Reader error";
                    case EID_E_CARD_MISSING: return "Card missing";
                    case EID_E_CARD_UNKNOWN: return "Card unknown";
                    case EID_E_CARD_MISMATCH: return "Card mismatch";
                    case EID_E_UNABLE_TO_OPEN_SESSION: return "Unable to open session";
                    case EID_E_DATA_MISSING: return "Data missing";
                    case EID_E_CARD_SECFORMAT_CHECK_ERROR: return "Card security format check error";
                    case EID_E_SECFORMAT_CHECK_CERT_ERROR: return "Security format check certificate error";
                    default: return "Unknown error, consult documentation";
                }
            }; 
        }
        property String^ EIDErrorDescriptionSr { 
            String^ get() 
            {
                switch(EIDErrorCode) 
                {
                    case EID_OK: return L"Operacija uspešno završena"; 
                    case EID_E_GENERAL_ERROR: return L"Opšta greška";
                    case EID_E_INVALID_PARAMETER: return L"Neispravan parametar";
                    case EID_E_VERSION_NOT_SUPPORTED: return L"Ova verzija API-a nije podržana";
                    case EID_E_NOT_INITIALIZED: return L"Biblioteka nije inicijalizovana";
                    case EID_E_UNABLE_TO_EXECUTE: return L"Biblioteka ne može izvršiti operaciju";
                    case EID_E_READER_ERROR: return L"Greška u čitaču kartica";
                    case EID_E_CARD_MISSING: return L"Kartica nije prisutna u čitaču";
                    case EID_E_CARD_UNKNOWN: return L"Nepoznata kartica u čitaču";
                    case EID_E_CARD_MISMATCH: return L"Pogrešna kartica u čitaču";
                    case EID_E_UNABLE_TO_OPEN_SESSION: return L"Biblioteka ne može da otvori sesiju";
                    case EID_E_DATA_MISSING: return L"Podaci nisu prisutni na kartici";
                    case EID_E_CARD_SECFORMAT_CHECK_ERROR: return L"Sigurnosna greška u formatu kartice";
                    case EID_E_SECFORMAT_CHECK_CERT_ERROR: return L"Greška pri proveri sertifikata na kartici";
                    default: return L"Nepoznata greška, konsultujte dokumentaciju";
                }
            }; 
        }

    private:
        int _EIDErrorCode;
    };


    // data strukture
    // --------------------------------------------------------------------------------------------------

    /// <summary>
    /// Sadrzi osnovne informacije o licnoj karti
    /// </summary>
    public ref struct DocumentData
    {
    public:
        String^ docRegNo;
        String^ issuingDate;
        String^ expiryDate;
        String^ issuingAuthority;
    };
    /// <summary>
    /// Sadrzi osnovne informacije o nosiocu licne karte
    /// </summary>
    public ref struct FixedPersonalData
    {
    public:
        String^ personalNumber;
        String^ surname;
        String^ givenName;
        String^ parentGivenName;
        String^ sex;
        String^ placeOfBirth;
        String^ stateOfBirth;
        String^ dateOfBirth;
        String^ communityOfBirth;
    };

    /// <summary>
    /// Sadrzi dodatne informacije o nosiocu licne karte
    /// </summary>
    public ref struct VariablePersonalData
    {
    public:
        String^ state;
        String^ community;
        String^ place;
        String^ street;
        String^ houseNumber;
        String^ houseLetter;
        String^ entrance;
        String^ floor;
        String^ apartmentNumber;
    };

    // interop klasa
    // --------------------------------------------------------------------------------------------------

    public ref class CelikInterop sealed
    {
    private:
        /// <summary>
        /// nested klasa koja sluzi kao global destructor/finalizer
        /// </summary>
        ref class CelikInteropCleaner sealed
        {
        internal:
            static CelikInteropCleaner^ _instance = gcnew CelikInteropCleaner();
            static property CelikInteropCleaner^ singleton { CelikInteropCleaner^ get() { return _instance; } }
        private:
            CelikInteropCleaner() {}
            ~CelikInteropCleaner() { this->!CelikInteropCleaner(); }
            !CelikInteropCleaner() 
            {
                // ovaj exception ako bude bice na kraju same aplikacije, ostavljen je zbog debug sesija
                int err;
                if ((err = EidCleanup()) != EID_OK) throw gcnew CelikException("Cleanup nije izvrsen", err);
            } 
        };

        static CelikInteropCleaner^  _cleaner;
        /// <summary>
        /// Globalni konstruktor za Celik Interop wrapper. Inicijalizuje Celik API, poziva se "skriveno" samo jednom
        /// </summary>
        /// <exception cref="CelikNET::CelikException">Bacen ukoliko Celik Startup nije prosao kako treba, kod greske je ukljucen u tekst exceptiona</exception>
        static CelikInterop() 
        {
            int err;
            if ((err = EidStartup(2)) != EID_OK) throw gcnew CelikException("Startup nije izvrsen", err);
            // startup je ok, kreiraj cleaner "singleton" ciji teardown ce ugasiti celik za slucaj da korisnik zaboravi
            _cleaner = CelikInteropCleaner::singleton;
        }

        // static dummy
        static int _dummy = 123;

    public:
        /// <summary>
        /// Globalni cleanup za Celik Interop wrapper. Ovo je poslednji CelikNET poziv u aplikaciji, posle njega vise nece raditi instanciranje i pozivanje CelikNET objekata/metoda. Alternativno mozete pustiti aplikaciju da se sama ocisti
        /// </summary>
        /// <exception cref="CelikNET::CelikException">Bacen ukoliko Celik Cleanup nije prosao kako treba, kod greske je ukljucen u tekst exceptiona</exception>
        static void Cleanup() 
        {
            //manuelni tear down celika, ako je cleaner inicijalizovan ovo ce deterministicki pozvadi dispose patern i uraditi zatvaranje 
            delete _cleaner;
        }

        /// <summary>
        /// Konstruktor za Celik Interop wrapper. Inicijalizuje Read operaciju kroz EidBeginRead i omogucava poziv blok komandi
        /// </summary>
        /// <exception cref="CelikNET::CelikException">Bacen ukoliko BeginRead nije prosao kako treba, kod greske je ukljucen u tekst exceptiona</exception>
        CelikInterop() 
        {
            // pipni staticko polje da bi naterao kompajler da pozove sttaicki konstruktor prvi put
            // http://connect.microsoft.com/V...or-not-called-in-release-build
            int dummy = CelikInterop::_dummy;
            // init read
            int err;
            if ((err = EidBeginRead("")) != EID_OK) throw gcnew CelikException("BeginRead nije izvrsen", err);
        }

        ~CelikInterop() 
        {
            // dispose pattern, pozovi finalizer
            this->!CelikInterop();
        }


        /// <summary>
        /// Ucitava osnovne podatke sa licne karte
        /// </summary>
        /// <returns>Instanca <see cref="CelikNET::FixedPersonalData">CelikNET::FixedPersonalData</see> klase u kojoj su podaci</returns>
        /// <exception cref="CelikNET::CelikException">Bacen ukoliko ReadFixedPersonalData nije prosao kako treba, kod greske je ukljucen u tekst exceptiona</exception>
        FixedPersonalData^ ReadFixedPersonalData() 
        {
            msclr::lock l(CelikInteropCleaner::singleton); // thread global sync
            int err;
            PEID_FIXED_PERSONAL_DATA p = new EID_FIXED_PERSONAL_DATA;
            if ((err = EidReadFixedPersonalData(p)) != EID_OK) throw gcnew CelikException("ReadFixedPersonalData nije izvrsen", err);
            FixedPersonalData^ fpd = gcnew FixedPersonalData;
            fpd->personalNumber = decodeUTF8Buffer(p->personalNumber, p->personalNumberSize);
            fpd->surname = decodeUTF8Buffer(p->surname, p->surnameSize);
            fpd->givenName = decodeUTF8Buffer(p->givenName, p->givenNameSize);
            fpd->parentGivenName = decodeUTF8Buffer(p->parentGivenName, p->parentGivenNameSize);
            fpd->sex = decodeUTF8Buffer(p->sex, p->sexSize);
            fpd->placeOfBirth = decodeUTF8Buffer(p->placeOfBirth, p->placeOfBirthSize);
            fpd->stateOfBirth = decodeUTF8Buffer(p->stateOfBirth, p->stateOfBirthSize);
            fpd->dateOfBirth = decodeUTF8Buffer(p->dateOfBirth, p->dateOfBirthSize);
            fpd->communityOfBirth = decodeUTF8Buffer(p->communityOfBirth, p->communityOfBirthSize);
            return fpd;
        }


        /// <summary>
        /// Ucitava dodatne podatke sa licne karte
        /// </summary>
        /// <returns>Instanca <see cref="CelikNET::VariablePersonalData">CelikNET::VariablePersonalData</see> klase u kojoj su podaci</returns>
        /// <exception cref="CelikNET::CelikException">Bacen ukoliko ReadVariabelPersonalData nije prosao kako treba, kod greske je ukljucen u tekst exceptiona</exception>
        VariablePersonalData^ ReadVariablePersonalData() 
        {
            msclr::lock l(CelikInteropCleaner::singleton); // thread global sync
            int err;
            PEID_VARIABLE_PERSONAL_DATA p = new EID_VARIABLE_PERSONAL_DATA;
            if ((err = EidReadVariablePersonalData(p)) != EID_OK) throw gcnew CelikException("ReadVariablePersonalData nije izvrsen", err);
            VariablePersonalData^ vpd = gcnew VariablePersonalData;
            vpd->state = decodeUTF8Buffer(p->state, p->stateSize);
            vpd->community = decodeUTF8Buffer(p->community, p->communitySize);
            vpd->place = decodeUTF8Buffer(p->place, p->placeSize);
            vpd->street = decodeUTF8Buffer(p->street, p->streetSize);
            vpd->houseNumber = decodeUTF8Buffer(p->houseNumber, p->houseNumberSize);
            vpd->houseLetter = decodeUTF8Buffer(p->houseLetter, p->houseLetterSize);
            vpd->entrance = decodeUTF8Buffer(p->entrance, p->entranceSize);
            vpd->floor = decodeUTF8Buffer(p->floor, p->floorSize);
            vpd->apartmentNumber = decodeUTF8Buffer(p->apartmentNumber, p->apartmentNumberSize);
            return vpd;
        }
                
        /// <summary>
        /// Ucitava osnovne podatke sa licne karte
        /// </summary>
        /// <returns>Instanca <see cref="CelikNET::DocumentData">CelikNET::DocumentData</see> klase u kojoj su podaci</returns>
        /// <exception cref="CelikNET::CelikException">Bacen ukoliko ReadDocumentData nije prosao kako treba, kod greske je ukljucen u tekst exceptiona</exception>
        DocumentData^ ReadDocumentData() 
        {
            msclr::lock l(CelikInteropCleaner::singleton); // thread global sync
            int err;
            PEID_DOCUMENT_DATA p = new EID_DOCUMENT_DATA;
            if ((err = EidReadDocumentData(p)) != EID_OK) throw gcnew CelikException("ReadDocumentData nije izvrsen", err);
            DocumentData^ dd = gcnew DocumentData;
            dd->docRegNo = decodeUTF8Buffer(p->docRegNo, p->docRegNoSize);
            dd->issuingDate = decodeUTF8Buffer(p->issuingDate, p->issuingDateSize);
            dd->expiryDate = decodeUTF8Buffer(p->expiryDate, p->expiryDateSize);
            dd->issuingAuthority = decodeUTF8Buffer(p->issuingAuthority, p->issuingAuthoritySize);
            return dd;
        }


        /// <summary>
        /// Ucitava sliku sa licne karte
        /// </summary>
        /// <returns>Instanca <see cref="System::Drawing::Bitmap">System.Drawing.Bitmap</see> klase u kojoj je slika licne karte</returns>
        /// <exception cref="CelikNET::CelikException">Bacen ukoliko ReadPortrait nije prosao kako treba, kod greske je ukljucen u tekst exceptiona</exception>
        Bitmap^ ReadProfileImage() 
        {
            msclr::lock l(CelikInteropCleaner::singleton); // thread global sync
            // izvuci bajtove portreta
            int err;
            PEID_PORTRAIT p = new EID_PORTRAIT;
            if ((err = EidReadPortrait(p)) != EID_OK) throw gcnew CelikException("ReadPortrait nije izvrsen", err);
            // iskopiraj sliku u managed space
            array<byte>^ managedArray = gcnew array<byte>(p->portraitSize);
            Marshal::Copy((IntPtr)p->portrait, managedArray, 0, p->portraitSize);
            // instanciraj bitmap sa jpeg nizom
            MemoryStream^ ms = gcnew MemoryStream(managedArray);
            return gcnew Bitmap(ms);
        }

    private:
        String^ decodeUTF8Buffer(char* buffer, int length) 
        {
            array<byte>^ managedArray = gcnew array<byte>(length);
            Marshal::Copy((IntPtr)buffer, managedArray, 0, length);
            return Encoding::UTF8->GetString(managedArray, 0, length);
        }

    protected:
        !CelikInterop() 
        {
            int err;
            if ((err = EidEndRead()) != EID_OK) throw gcnew CelikException("EndRead nije izvrsen", err);
        } 
    };
}


Kod za ConsolTester Program.cs (ništa nije promenjeno)

Code:
/*  
    This file is part of CelikNET.

    CelikNET is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

    CelikNET is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License along with CelikNET.  If not, see <http://www.gnu.org/licenses/>.
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;

namespace ConsoleTester
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.OutputEncoding = Encoding.GetEncoding(1251) ;
            try
            {
                using (CelikNET.CelikInterop x = new CelikNET.CelikInterop())
                {
                    Console.WriteLine("Podaci o licnoj karti ------------------------------------------");
                    CelikNET.DocumentData d3 = x.ReadDocumentData();
                    Console.WriteLine("docRegNo: {0}", d3.docRegNo);
                    Console.WriteLine("issuingDate: {0}", d3.issuingDate);
                    Console.WriteLine("expiryDate: {0}", d3.expiryDate);
                    Console.WriteLine("issuingAuthority: {0}", d3.issuingAuthority);

                    Console.WriteLine("Fiksni podaci ------------------------------------------");
                    CelikNET.FixedPersonalData d1 = x.ReadFixedPersonalData();
                    Console.WriteLine("personalNumber: {0}", d1.personalNumber);
                    Console.WriteLine("surname: {0}", d1.surname);
                    Console.WriteLine("givenName: {0}", d1.givenName);
                    Console.WriteLine("sex: {0}", d1.sex);
                    Console.WriteLine("placeOfBirth: {0}", d1.placeOfBirth);
                    Console.WriteLine("stateOfBirth: {0}", d1.stateOfBirth);
                    Console.WriteLine("dateOfBirth: {0}", d1.dateOfBirth);
                    Console.WriteLine("communityOfBirth: {0}", d1.communityOfBirth);

                    Console.WriteLine("Variablini podaci ------------------------------------------");
                    CelikNET.VariablePersonalData d2 = x.ReadVariablePersonalData();
                    Console.WriteLine("state: {0}", d2.state);
                    Console.WriteLine("community: {0}", d2.community);
                    Console.WriteLine("place: {0}", d2.place);
                    Console.WriteLine("street: {0}", d2.street);
                    Console.WriteLine("houseNumber: {0}", d2.houseNumber);
                    Console.WriteLine("houseLetter: {0}", d2.houseLetter);
                    Console.WriteLine("entrance: {0}", d2.entrance);
                    Console.WriteLine("floor: {0}", d2.floor);
                    Console.WriteLine("apartmentNumber: {0}", d2.apartmentNumber);

                    Console.WriteLine("Slika ------------------------------------------");
                    Bitmap c = x.ReadProfileImage();
                    Console.WriteLine("Ucitana slika {0}x{1}", c.Width, c.Height);
                }
                Console.ReadLine();
            }
            catch (CelikNET.CelikException ex)
            {
                Console.WriteLine("EXCEPTION: {0} {1}", ex.EIDErrorCode, ex.EIDErrorDescriptionEn);
                Console.ReadLine();
                throw ex;
            }

        }
    }
}
[ DaliSte1984 @ 05.01.2021. 10:24 ] @
Pozdrav ljudi,
pre svega da se zahvalim svima na odgovorima, dane sam proveo na ovoj temi pokusavajuci da resim implementaciju ovog apija u svoju C# aplikaciju.
Sve redom greske koje su se pojavljivale, ovde sam nasao odgovore, do one zadnje, koja nam se desava kada napravimo aplikaciju i radi kod nas na racunaru, ali kada prebacimo na drugi racunar,
izbacuje gresku
could not load file or assembly celiknet.dll or one of its dependencies. The specified module could not be found
tu sam se dosta pomucio, bilo je i ovde predloga, da se kopiraju fajlovi CelikAPI.dll i CelikNET.dll u System32 folder i SysWOW64 folder, ali i posle toga nije uspevalo, nema sta nisam probavao.
Na kraju, dosao sam do resenja pa sam se registrovao na ES samo da bih dao svoje resenje kao savet nekom drugom, da ne izgubi kao i ja dane :)
Znaci, za one koji su 5 puta iscitali sva resenja ovde ali i dalje imaju gresku
could not load file or assembly celiknet.dll or one of its dependencies. The specified module could not be found
kad prebace C# aplikaciju na drugi racunar,
pronadjite fajl sa nazivom msvcr120d.dll (jako je bitno ovo malo slovo d na kraju naziva),
fajl se nalazi u vasim folderima na racunaru na kom vam aplikacija radi bez problema i na kom ste je napravili(folderi System32 folder i SysWOW64)
taj fajl prekopirajte i iste te foldere na racunaru na kom do sad nije hteo da se pokrene program i radice.
Nadam se da ce nekom ovo pomoci.
Pozdrav
[ Mihajlo Cvetanović @ 05.01.2021. 10:39 ] @
To malo "d" u imenu fajla je Debug. Projekti u Visual Studiju obično dolaze u dve konfiguracije, Debug i Release. Debug se koristi dok razvijamo program, jer omogućava debagovanje. Release treba da se koristi kada program treba da se izvršava na svim drugim mašinama, jer će se brže izvršavati. Takođe, tu je i problem licence. Mikrosoft zabranjuje da se kopiraju te Debug biblioteke sa "d" u imenu. Imaš pravo da ih koristiš samo ako dolaze uz Visual Studio. Morao bi na svaku ciljnu mašinu da instaliraš i Visual Studio, da ne bi kršio zakon.

Moja preporuka je da bilduješ svoj program u Release konfiguraciji i to distribuiraš na druge mašine. Takav program koristi biblioteku bez slova "d" u imenu, koja je najverovatnije već instalirana na ciljnoj mašini, a ako i nije postoje besplatni takozvani redistributabilni paketi od Mikrosofta kojima se te biblioteke instaliraju.
[ davor.bulic @ 02.08.2022. 15:14 ] @
Da oživim malo ovu temu.

Na prvom mestu, hvala @mmix na podeljenom kodu, hvala i svima ostalima na korisnim komentarima.

Imao sam potrebu da izmenim ovaj dll, pa vam šaljem sada svoju verziju koda sa par izmena.

- izmenjen je CelikApi.dll na poslednju verziju koju je mup izdao ApiVersion =3, sa kojojm rade sve lične karte, i one od pre 2013. i ove najnovije.
- izmenjen je konstruktor da prima naziv čitača kartica, ako neko ima potrebu da na jednom računaru ima više čitača, ovo mu može pomoći. Imate primer u Program.cs fajlu kako se ime čitača prebacuje u sbyte*

Kod možete preuzeti: https://drive.google.com/file/...5UDIJsutSQNM1/view?usp=sharing

Pozdrav svima.





[ ivan.a @ 27.10.2022. 20:30 ] @
@davor.bulic ,
hvala na izmenama.
Testirao sam kod sa novim izmenama (preuzeto sa linka iznad) i kada pokrenem ConsoleTester dobijam poruku EXCEPTION: -1 General Error
Testirano je na više računara - VS 2019, zatim VS 2022 i 2015. Konfigurisano je kako je opisano u prethodnim postovima. Na drugom računaru je instaliran samo VS 2019, učitano sve default i nakon kompajliranja dobija se gore pomenuta greška.
Inače, aplikacija skinuta sa mup-ovog sajta radi, sve ovo je testirano sa 2 čitača (gemalto i omnikey) i greška se javlja uvek.
Ako neko zna u čemu je problem, mogao bi da napiše.
[ davor.bulic @ 28.10.2022. 07:46 ] @
Ivane,

ja sam sve radio u vs2019, jedino što mi pada na pamet da bi moglo da pravi problem je što sam ja zakucao ime mog čitača u kodu, ti treba da staviš svoj.
27. linija koda u Program.cd fajlu:
string str = "OMNIKEY AG Smart Card Reader USB 0\0";

Pozdrav
[ ivan.a @ 28.10.2022. 07:57 ] @
To je prvo što sam uradio - izmenio sam naziv čitača, ali izgleda da nije do toga. :(
[ davor.bulic @ 28.10.2022. 08:38 ] @
Vidi, ostavio sam i običan konstruktor bez parametara, izmeni kod da koristi taj, da budeš siguran da nije do moje izmene.
Ako je i dalje prisutan problem, probaj onda da prečešljaš temu ispočetka, verujem da je neka sitnica koja ti je promakla.
[ ivan.a @ 28.10.2022. 10:04 ] @
EDIT:
Upravo sam uspeo. Navodno drajver je bio problem (koristio sam ranije WinUSB drajver za web pa je imao konflikt). Radi sve (ali bez parametra za CelikInterop. Sa parametrom ne radi).
-------------
Hvala na odgovoru.

CelikInterop() sam probao bez parametra. Takođe, izmenio CelikNET.cpp da ne koristi parametar.
Nazivi čitača su: "Gemplus USB Smart Card Reader" i drugi "Microsoft Usbccid SmartCard Reader (WUDF)". Probao sam i bez ovog Gemplus (kao što piše u Device manageru).
Javlja se isti problem. Čudno je da MUP RS aplikacija radi bez problema, a da ovde izbacuje grešku.
Takođe, u jednoj verziji CelikNET sam dodao deo koda u Program.cs gde uz .txt fajla čita naziv čitača.
Odmah nakon string str = ...
Code:
string contents = "USB SmartCard Reader";
if (File.Exists("card.txt"))
{
    contents = File.ReadAllText(@"card.txt");
    str = contents;
}

I stavio card.txt sa nazivom čitača u isti folder gde je .exe kako bih mogao da brzo testiram sa raznim čitačima.
Naravno, ni ovo ne pomaže. I dalje se javlja greška.
Već duže vreme se mlatim sa ovim :)

Dodatak:
Probao sam i da automatski nađe naziv čitača sa new SCardContext() ... context.GetReaders(); itd. ali ni to ne pomaže.
Hvala.


[Ovu poruku je menjao ivan.a dana 28.10.2022. u 11:34 GMT+1]

[Ovu poruku je menjao ivan.a dana 28.10.2022. u 13:38 GMT+1]
[ mmix @ 05.12.2022. 11:12 ] @
Ok, probudio sam se Trebalo mi je samo 12 godina
Treba mi ova biblioteka za neki WPF projekat, tako da je vreme da se malo posvetim osavremenjavanju ove biblioteke i dovodjenje iste u moderne okvire


Dakle, napravio sam repositorijum na GitLab-u, dodao osnovni sors i Davorove izmene (@davor.bulic, procitaj * primedbu na kraju)

Repo je lociran na GitLab: Mitro Celik Core

Trenutno su iskljuceni issues, i samo clanovi mogu da commituju, i (za sada) sam samo ja clan.

Faza 1, koju cu uraditi sam:

- Dodavanje targeta za .net core (sve supported LTS i intermediary releases), NETStandard 2.0 i NETFramework 4.8. Generalno release cycle ce podrzvati i pratiti MS NET Foundation support ciklus
- Dovodjenje u buildable stanje da podrzava trenutni feature-set radi lakse migracije
- Publikovanje biblioteke na NuGet
- Transfer licence sa LGPL na MIT (davore, procitaj * ). Stvari su se dosta promenile na tom polju od 2010

ideja za prvu fazu je da samo prestanete da bildujete svoju biblioteku i ukljucite NuGet paket u projekat i sve nastavi da radi (mozda ce namespace da se promeni samo).
Kad to zavrsim, squashovacu sve izmene u jedan commit u masteru i otkljucacu issues za public pristup, isto cu prihvatati pomoc ko zeli da se prikljuci, i preci cemo u pun pull-request/code review proces. Neke od stvari koje treba da se urade u fazi 2:

- CI
- CD na NuGet
- Puna async podrska
- podrska za konfiguraciju citaca i (re)inicijalizaciju biblioteke na drugom/vise citaca
- podrska za nove CelikAPI funkcije
- podrska za Dependency Injection upotrebu (interfejsi, fabrike i ta cudesa)
- podrska za x86 i x64 (dakle za AnyCPU)
- podrska za Linux, dalje podrska za ARM (ovo sve pod uslovom da ili pribavimo CelikAPI za te paltforme ili da nekako izbunarimo protokol komunikacije)
- Demo aplikacije za Console (mozda asp.net backend use), WinForms, WPF i ako izbunarimo Linux/ARM za GTK+, QT i sta god da Mac koristi.
- druge ideje?

Ako imate neki savet, primedbu, sugestiju, pisite dalje u ovoj temi.

* Primedba za Davora:
Davore, kako sto vidis, planiram da promenim licencu u MIT, posto si ti contributor pod LGPL3 licencom koja ne dozvoljava downgrading na MIT, treba mi tvoja dozvola. I treba mi tvoj email za CONTRIBUTORS fajl.
[ Mihajlo Cvetanović @ 05.12.2022. 12:34 ] @
Kako bi se napravila async podrška kad osnovne API funkcije nisu async? Ne vidim svrhu.

Sve ostalo podržavam.

Inače, *.suo i *.user fajlovi ne treba da idu u git.
[ davor.bulic @ 05.12.2022. 14:52 ] @
Pozdrav Miljane,
drago mi je da si rešio da se posvetiš ponovo ovome.

Hvala za stavljanje na contributors listu, ali zaista nije bilo potrebe, moj doprinos je bio minimalan.
Naravno da imaš dozvolu, što se tiče email adrese ona je na gmail-u, a domenu prethodi isto korisničko ime koje imam i ovde.

Puno uspeha!

Citat:
mmix:
Ok, probudio sam se :) Trebalo mi je samo 12 godina :)
Treba mi ova biblioteka za neki WPF projekat, tako da je vreme da se malo posvetim osavremenjavanju ove biblioteke i dovodjenje iste u moderne okvire


Dakle, napravio sam repositorijum na GitLab-u, dodao osnovni sors i Davorove izmene (@davor.bulic, procitaj * primedbu na kraju)

Repo je lociran na GitLab: Mitro Celik Core

Trenutno su iskljuceni issues, i samo clanovi mogu da commituju, i (za sada) sam samo ja clan.

Faza 1, koju cu uraditi sam:

- Dodavanje targeta za .net core (sve supported LTS i intermediary releases), NETStandard 2.0 i NETFramework 4.8. Generalno release cycle ce podrzvati i pratiti MS NET Foundation support ciklus
- Dovodjenje u buildable stanje da podrzava trenutni feature-set radi lakse migracije
- Publikovanje biblioteke na NuGet
- Transfer licence sa LGPL na MIT (davore, procitaj * :) ). Stvari su se dosta promenile na tom polju od 2010 :D

ideja za prvu fazu je da samo prestanete da bildujete svoju biblioteku i ukljucite NuGet paket u projekat i sve nastavi da radi (mozda ce namespace da se promeni samo).
Kad to zavrsim, squashovacu sve izmene u jedan commit u masteru i otkljucacu issues za public pristup, isto cu prihvatati pomoc ko zeli da se prikljuci, i preci cemo u pun pull-request/code review proces. Neke od stvari koje treba da se urade u fazi 2:

- CI
- CD na NuGet
- Puna async podrska
- podrska za konfiguraciju citaca i (re)inicijalizaciju biblioteke na drugom/vise citaca
- podrska za nove CelikAPI funkcije
- podrska za Dependency Injection upotrebu (interfejsi, fabrike i ta cudesa)
- podrska za x86 i x64 (dakle za AnyCPU)
- podrska za Linux, dalje podrska za ARM (ovo sve pod uslovom da ili pribavimo CelikAPI za te paltforme ili da nekako izbunarimo protokol komunikacije)
- Demo aplikacije za Console (mozda asp.net backend use), WinForms, WPF i ako izbunarimo Linux/ARM za GTK+, QT i sta god da Mac koristi.
- druge ideje?

Ako imate neki savet, primedbu, sugestiju, pisite dalje u ovoj temi.

* Primedba za Davora:
Davore, kako sto vidis, planiram da promenim licencu u MIT, posto si ti contributor pod LGPL3 licencom koja ne dozvoljava downgrading na MIT, treba mi tvoja dozvola. I treba mi tvoj email za CONTRIBUTORS fajl.

[ mmix @ 05.12.2022. 18:08 ] @
Citat:
Mihajlo Cvetanović: Kako bi se napravila async podrška kad osnovne API funkcije nisu async? Ne vidim svrhu.



U principu svaki proces koji ima neki IO ili waiting period moze da se asyncuje da bi se pozivni thread oslobodio. Citanje smart card-a definitivno pada u tu kategoriju, iako je obfuscated kroz API DLL metod (koji, tacno, nije async) To je narocito vazno kod GUI aplikacija da se ne bi blokirao dispatcher i async je veoma lep mehanizam da se izbegne manuelni offloading sa dispatcher thread-a. Konkretan primer zasto bi ovo bilo dobro je recimo WPF aplikacija u situacijama kad citac ima problema sa citanjem kartice i slicno, kada waiting/retrying mzoe da potraje duze vreme tokom kojeg ce dispatcher biti blokiran.

U principu najlakse je asynovati stvari koje se oslanjaju na neki vec uradjeny async proces (npr http upit, itd), onda uradis piggy-back na postojeci async process kroz await (a tvoj metod onda bude async).
Kad je nesto sasvim novo onda si, kolokvijalno, "on the bottom of the async pile" i pravis svoju implementaciju root async task-a. Vec sam to radio za neke procese u jednom embedded sistemu. Ides kroz AsyncMethodBuilder<T> ili kroz ValueTask<T>. Koji cu/cemo tacno pristup izabrati zavisi od arhitekture biblioteke. Vec sada sam naleteo na problem da framework/msbuild i core c++ izgleda ne mogu biti u istom projektu jer jedan ne ume da napravi assembly od C++ koda za drugi, tako da cu verovatno morati da napravim dva razlicita asemblija za framework i core. Dosta se izdesavalo i na polju interopa u zadnjih 12 godina, tako da moze da se desi da uspem i da ostvarim sve sto hocu kroz interop manipulaciju, cime bih izbegao C++ generalno. Videcemo, radim na ovome koliko vreme dozvoli.


EDIT: Sad kad malo bolje razmislim, mislimda nema ni potrebe za bottom-pile poslom, mislim da je dovoljno offloadovati sync posao na worker thread i pustiti continuation u dispatcher. Videcu jos.


Odavde sam dobio ideje: SO: Implement async "yielding" the proper way

Citat:
Mihajlo Cvetanović: Inače, *.suo i *.user fajlovi ne treba da idu u git.


Hmm, pogledacu, ne bi trebalo da su tu, trebalo bi da ih je .gitignore izbacio. mozda su se provukli u working tree pre nego sto sam iskopirao gitignore.
[ lazabrepk @ 13.09.2023. 08:42 ] @
Pozdrav svima,

N0ob here!

eto, ja pokushah da dodam citac LK u svom projektu koji je radjen u VB.NET-u, ali posle ne znam vise koliko dana ja ne umem ovo da uradim!!! Predhodno sam koristio CitacLK NET Wrapper i sve radi ok, osim sto ne cita nove lk :P
Pokusao sam ne znam koliko puta i imao sve moguce greske vise ne znam sta da probam!
Zamolicu nekog ako je slobodan da mi blize pomogne kako da dodam citac lk u npr novom projektu pa cu u tom novom projektu do skapiram sta i kako ide i da ga sam prenesem na glavni projekat!

Unapred zahvalan !!
[ Mihajlo Cvetanović @ 13.09.2023. 12:21 ] @
A što ne bi koristio taj wrapper u svom VB projektu? Treba samo da zameniš Čelik API sa najnovijim (1.3.3) da bi čitao najnovije lične karte. Možeš da preuzmeš najnoviji Čelik API sa sajta MUP.
[ lazabrepk @ 19.09.2023. 10:50 ] @
To sam prvo pokusao, tj da samo zamenim CelikApi dll file, ali nishta se ne desi, tj i dalje ne radi!
[ Mihajlo Cvetanović @ 19.09.2023. 10:59 ] @
Moraš da budeš precizniji. Jako je mala verovatnoća da se "ništa ne desi". Nešto konkretno se moralo desiti. Da li je neka funkcija vratila grešku (koja je funkcija i koji je broj greške)? Da li se desio neki exception, i koji? Da li je aplikacija prosto "pukla" (onda pogledaj Event Viewer za više informacija)?

Treba nam više informacija. Bez detaljnog uvida u tvoj konkretni problem teško da možemo da ti pomognemo.
[ CicaDraza76 @ 27.11.2023. 12:09 ] @
Poštovani MMIX, hvala na vašem rešenju koje ste postavili na GIT.Uspeo sam sam da iščitam podatke sa LK u consolu (naravno ENVIROMENT PATH za CelikApi.dll koji nije u Windows folderu) i naravno 64-bit računar.Ako smem da primetim, da bi aplikacija mitro.celikcore-master radila tj, iščitivala podatke sa LK i da bi se izbegla greška "is not a valid Win32 application" potrebno je da se ConsoleTester aplikacija postavi kao startup project. Nadam se da je ovo nekome pomoglo, osim ako vi već negde niste naveli ovaj mali workaround.Hvala još jednom.Molim da mi neko napiše kako da obrišem ovaj post, jer ne bi da mi neko plače zbog korisničkog imena, a nadam se da će do tada oni kojima je poruke upućena to videti.

[Ovu poruku je menjao CicaDraza76 dana 27.11.2023. u 13:25 GMT+1]

[Ovu poruku je menjao CicaDraza76 dana 27.11.2023. u 13:34 GMT+1]
[ CicaDraza76 @ 12.12.2023. 09:52 ] @
Želeo bih da dodam još par stvari vezano za vaš projekat.Naime, nakon što sam napravio svoju testnu WPF aplikaciju i dodao CelikNET referencu, primetio sam da mi ne treba ni enviroment variabla, dovoljno je da CelikApi.dll bude u istom folderu kao i CelikNET.dll), pošto bi inače morao pisati kod za upisivanje iste u sistem što nije baš naivno. Btw, da bi tako napravljena aplikacija mogla raditi na računarima na kojima NEMA instaliran Visual Studio, potrebno je u isti folder gde su dll-ovi iskopirati dva dll iz System 32 foldera programerskog računara (vcruntime140d.dll i ucrtbased.dll, koga zanima kako sam došao do ovog rešenja mogu da odgovorim).Naravno sad je 2023.godina i sve ovo se odnosi na ISKLJUČIVO 64 bitne računare.Takođe, potrebno je da se build verzija ConcoleTester aplikacije postavi kao AnyCPU.Nadam se da je ovo bar nekome pomoglo, pošto sam video u celom topicu, kojeg sam naučio napamet, lol, da autor projekta PODSTIČE da mi kojima je dao ovo rešenje, napišemo sve što mislimo de će drugima koristiti.Recimo meni bi spasilo 2 radna dana da je neko durgi ovo napisao, a sigurno ima takvih.
[ Mihajlo Cvetanović @ 12.12.2023. 12:23 ] @
CelikApi.dll ne treba da bude u istom folderu u kome je CelikNET.dll, nego u istom folderu u kome je aplikacija koja koristi CelikNET.dll. Razlika je mala ali bitna ako .exe i CelikNET.dll nisu u istom folderu, što vrlo lako može da se desi ako se CelikNET.dll povlači iz nečega što se zove GAC (Global Assembly Cache).

Aplikaciji je potreban vcruntime140d.dll samo ako je aplikacija bildovana u Debug konfiguraciji. Slovo "d" u imenu ukazuje na to. Aplikacije bildovane u Debug konfiguraciji smeju da se izvr[avaju samo na mašinama koje imaju Visual Studio instaliran. Mikrosoft nam ne daje pravo da kopiramo vcruntime140d.dll na druge mašine. Zabranjeno zakonom. Mikrosoft nam daje takozvane "redistributable" pakete, koji mogu da se preuzmu sa ove stranice. Aplikacije bildovane u Release konfiguraciji će moći da se izvršavaju na mašinama na kojima je instaliran odgovarajući Visual C++ Redistributable paket.
[ bokinet @ 06.02.2024. 23:30 ] @
Ako nekom bude zatrebalo resenje.
Jeste iz arhive ali trebalo bi da vrsi posao.

https://www.elitesecurity.org/p4073681