03. april 2013 - 09:55Der er
16 kommentarer og 1 løsning
DLLExport drivere betalingsterminaler Linux HJÆLP
Hej Eksperter
Jeg er helt lost
Jeg har ikke programmeret C++ i 10 år. siden har jeg holdt mig til PHP.
Nu har jeg pludselig fået en opgave hvor vi skal integrere dankort betalingsterminaler i de kasseapparater vi laver.
Jeg har heller aldrig beskæftiget mig særlig meget med Linux, men vores skal laves i Linux.
Først og fremmest var det nyt for mig at DLL - filer ikke er noget Windows specifikt, men at de bare ikke hedder .dll i Linux.
Fra producenten er der vedlagt filer til Windows og Linux. I Windows heder de flxdrv.dll og flxdrv.lib så jeg antager at filerne FlexDriver.a.3.3 og FlexDriver.so.3.3 er de tilsvarende. Desuden er der vedlagt en demo, men den er skrevet i C# som jeg heller ikke er kendt med.
Med løsningen følger der en .h fil. Det må jo så være denne jeg skal bruge til at udvikle min .cpp fil. Men jeg har store problemer med at tolke definitionerne i denne fil.
Især har jeg besvær med at forstå en betegnelse "DllExport".
/* Function: flxOpen open session to terminal flxdrv.ini file used by function to determine open type. Input: - Output: - Return: - See CONNECT RETURN VALUES above OPEN_NO_RECEIPT - if open but terminal in no receipt state FAILURE - not OK SUCCESS - OK. */ DllExport int flxOpen(void);
Hvorfor er der ingen .cpp til disse funktioner? Har det noget med DLLExport at gøre?
Jeg håber nogen kan hjælpe mig lidt på vej, så jeg i det mindste kan komme i gang.
.h filen includerer også nogle funktioner i stil med
Function: pcbPrintReceipt printReceipt prints a formatted receipt or report.
Prototype: int printReceipt(unsigned int receipt_status, const char* cText);
som man kan vælge at inkludere.
Skal man forstå det således at jeg skal programmere en .cpp for disse funktioner, og at de funktioner med foranstående DLLExport allerede er compileret i .a/.so og at compileren så vil hente funktionerne derfra?
Altså - Som jeg startede med - Det er lang tid siden jeg har rørt ved c++ og Linux. Det skal lige ind igen. Og jeg har ikke rørt Dynamic Libaries før. Og hvad angår dokumentationen er den meget tynd. Den smule der findes er til Windows. Så vidt jeg husker skal DLL filer føres ind i registreringsdatabasen i Windows, men hvordan man gør det i Linux ved jeg ikke.
Compileringen?
Jeg har søgt på nettet. Det har gjort mig om muligt endnu mere forvirret.
Jeg har altså mine filer FlexDriver.a.3.3 og FlexDriver.so.3.3, flex.h og nu min testGetTermID.cpp .
Som jeg forstår en vejledning på nettet skal jeg placere FlexDriver.a.3.3 og FlexDriver.so.3.3 i usr/lib/ . Hos mig ligger der også andre so filer der.
Så nævnes dette. Hvad gør det og oversættes det i mit tilfælde. gcc -shared -Wl,-soname,your_soname \ -o library_name file_list library_list
Så nævnes følgende. Jeg antager at libmystuff.so.1 er FlexDriver.so.3.3. Men resten forstår jeg ikke. gcc -fPIC -g -c -Wall a.c gcc -shared -Wl,-soname,libmystuff.so.1 \ -o libmystuff.so.1.0.1 a.o -lc
Endelig nævnes det at jeg skal skrive følgende.
ldconfig -n directory_with_shared_libraries
Jeg antager at directory_with_shared_libraries er usr/lib/? Er det dette der gør det samme som når en dll fil registreres i Widows?
Men hvor kommer DllExport ind? Og hvor er min libmystuff.a.1? Og hvor skal jeg placere min flex.h fil når jeg compiler?
Ja - Jeg er meget forvirret. Min eneste glæde er at kortlæseren ikke blev registreret som en ukendt enhed, og at den bootede korrekt da jeg tilsluttede pci-kablet.
Kunne du give mig et hint til hvordan min g++ kommando(er) skal se ud? Hvis bare jeg får et lille program der kan få kortlæseren til så meget som at blinke er vi på rette vej. Så burde jeg kunne klare den. Er der i øvrigt ikke noget med at man kan tilføje noget til g++ kommandoen så den giver en lidt uddybende fejlmelding?
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.