Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

DLL driver za fiskalnu kasu SHARP ER-A 457S

[es] :: C/C++ programiranje :: DLL driver za fiskalnu kasu SHARP ER-A 457S

[ Pregleda: 5079 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

djmrky
Novi Sad

Član broj: 25160
Poruke: 179
212.62.36.*



Profil

icon DLL driver za fiskalnu kasu SHARP ER-A 457S22.04.2004. u 14:02 - pre 243 meseci
Izvinjavam se ako ovo nije bas specificna tema za ovaj forum, ali je svakako u vezi sa programiranjem.
==============
Kako importovati funkciju "CallDriver457" iz dll-a (driver-a) koji je stigao sa softverom QuickLink sa ovom kasom
tj. kako deklarisati pointer u C++-u na tu funkciju (koji tip vraca, i sta prima funkcija)
ja sam probao gomilu deklaracija, npr:

typedef int (*pCallDriver)(LPTSTR, LPTSTR, byte);

znaci, treba mi tacna deklaracija pointer-a u C++-u na ovu funkciju (uputstvo je prilicno nejasno)
HVALA!

She's nice from a far, but far from nice.
 
Odgovor na temu

yooyo

Član broj: 4891
Poruke: 1101
*.sbb.co.yu



Profil

icon Re: DLL driver za fiskalnu kasu SHARP ER-A 457S22.04.2004. u 15:21 - pre 243 meseci
Daj da vidimo sta pise u dokumentaciji pa ti mozemo pomoci...
Primer koji si ti napisao mozda ne radi zbog calling konvencije ili zbog toga sto nisi pravilno naveo parametre...

Ovo je klasican primer:
#define CALLTYPE __cdecl ili __ fastcall ili __stdcall ili nista
typedef void (CALLTYPE *PFNNEKAFUNKCIJA) (int p1, const char* p2, int p3);
PFNNEKAFUNKCIJA NekaFunkcija;

NekaFunkcija = (PFNNEKAFUNKCIJA)GetProcAddress(handle, "ImeFunkcijeUDLL-u");
AKo je posle ovoga NekaFunkcija != NULL dobio si pointer na zeljeni entry point.

Jako je bitno da znas koji je CALLTYPE jer ako to pogresis program ce pucati pri pokusaju poziva dll funkcije

yooyo
 
Odgovor na temu

djmrky
Novi Sad

Član broj: 25160
Poruke: 179
212.62.36.*



Profil

icon Re: DLL driver za fiskalnu kasu SHARP ER-A 457S23.04.2004. u 07:44 - pre 243 meseci
Pa evo, ovo bi bio deo dokumentacije koji se tice poziva driver-a:
========================================
II Poziv drajvera

Drajver se poziva na sledeći način:

• Ukoliko se koristi drajver u formatu izvršne datoteke

drv457 Cmd=<komandna_datoteka> [Tel=<broj_telefona>] CL=<latinica/ćirilica>


• Ukoliko se koristi drajver u formatu dinamičke biblioteke

CallDriver457(<komandna_datoteka>,[<broj_telefona>],<latinica/ćirilica>)

gde je:

<komandna_datoteka> - naziv datoteke sa komandama za registar kasu (npr. komanda.cmd)
<broj_telefona> - broj telefona za modemsku komunikaciju (nije obavezan parametar)
<latinica/ćirilica> - 0 za latinično pismo, 1 za ćirilično pismo

U slučaju da se koristi parametar <broj_telefona> komunikacija sa registar kasom obavljaće se pomoću modema. Ukoliko se ovaj parametar izostavi komunikacija će biti direktna, dakle pomoću serijskog kabla. U okviru telefonskog broja navodi se i vrsta biranja (P = pulsno, T = tonsko) kao prvi znak. Ukoliko se koristi drajver u formatu izvršne datoteke naziv komandne datoteke, broj telefona i izbor pisma navode se bez praznina i početnih i krajnjih apostrofa. U slučaju da se koristi drajver u formatu dinamičke biblioteke naziv komandne datoteke i broj telefona kao znakovni parametri moraju se navesti prilikom poziva funkcije pod navodnicima ili apostrofima (u zavisnosti od programskog jezika koji se koristi) pošto su to znakovni podaci, a izbor pisma mora se uneti kao broj 0 ili 1 pošto je u pitanju podatak tipa byte.

U slučaju uspešne komunikacije poziv funkcije CallDriver457 vraća 0 a u suprotnom vrednost različitu od nule.

U slučaju uspešne komunikacije drv457 vraća exit code 0 a u suprotnom vrednost različitu od nule.

Primer:

drv457 Cmd=slanje.cmd Tel=T411232 CL=0
drv457 Cmd=prijem.cmd CL=0
CallDriver457(‘slanje.cmd’,’’,1)
CallDriver457(‘prijem.cmd’,’P021456789’,0)
=======================================================
Ovde ima i nacin poziva preko exe driver-a, ali meni treba bas preko dll-a
Kod koji sam ja napisao izgleda otprilike ovako:
======================================
//.....
typedef int (*pCallDriver)(LPTSTR, LPTSTR, int);

// kasnije u main-u

HINSTANCE hDLL;
hDLL = LoadLibrary("drv457.dll");
if (hDLL == 0){
getchar();
return nRetCode;
}

pCallDriver pointerCallDriver;
pointerCallDriver = (pCallDriver) GetProcAddress(hDLL, "CallDriver457");
// **** OVDE VRACA NULL *****
if (pointerCallDriver == NULL){
getchar();
return nRetCode;
}

FreeLibrary(hDLL);
getchar();
=======================================
ja mislim da je glavni problem sto ne znam tacno tipove parametara, a nisu mi bas najjasniji iz te dokumentacije.
Jel mogu ja nekako saznati koji je CALLTYPE te funkcije?
She's nice from a far, but far from nice.
 
Odgovor na temu

yooyo

Član broj: 4891
Poruke: 1101
*.sbb.co.yu



Profil

icon Re: DLL driver za fiskalnu kasu SHARP ER-A 457S23.04.2004. u 10:22 - pre 243 meseci
pointerCallDriver je NULL zato sto ta funkcija ili ne postoji ili ima neki drugi naziv (npr. CallDriver457@12)

Da li imas slucajno MSVC 6.0. Ako imas u njemu postoji programcic koji se zove
depends.exe. Startuj ga i otvori drv457.dll. U donjem desnom uglu treba da se pojavi lista exportovanih funkcija i medju njima CallDriver457.

U stvari... ajde okaci o poruku taj DLL pa cu da ga pogledam.

yooyo
 
Odgovor na temu

djmrky
Novi Sad

Član broj: 25160
Poruke: 179
212.62.36.*



Profil

icon Re: DLL driver za fiskalnu kasu SHARP ER-A 457S26.04.2004. u 09:48 - pre 243 meseci
Hvala puno na pomoci, u medjuvremenu sam pisao i dobavljacima kase i posali su mi ispravnu deklaraciju, samo je trebalo da bude:

typedef byte (*pCallDriver)(long, long, byte);

btw, koristio sam depends (iz VC7.0 .NET) vec i pre i znam da moze da mi da eksportovane funkcije, ali mislim da ne moze da mi da i tipove parametara, koje funkcije vracaju i primaju (mozda i gresim).

u svakom slucaju, gornja varijanta je proradila iz prve (cudo jedno kako radi uz dobru dokumentaciju)

Jos jednom hvala puno na pomoci, imacu ja verovatno jos problema s tim.


She's nice from a far, but far from nice.
 
Odgovor na temu

[es] :: C/C++ programiranje :: DLL driver za fiskalnu kasu SHARP ER-A 457S

[ Pregleda: 5079 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.