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

Pozivanje i deklaracija funkcije iz DLL-a

[es] :: Pascal / Delphi / Kylix :: Pozivanje i deklaracija funkcije iz DLL-a

Strane: 1 2

[ Pregleda: 3430 | Odgovora: 28 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

FranjoZG
Franjo Popović
Programer
Zagreb

Član broj: 328819
Poruke: 298
*.adsl.net.t-com.hr.



+4 Profil

icon Pozivanje i deklaracija funkcije iz DLL-a19.12.2018. u 12:36 - pre 64 meseci
Stanka kupila terminal HT630 za očitavanje barkodova. Karno, samo kako da ga očitam? Postoji program, ali dati stranic... bit će svega...
U glavnom, dobio DLL koji u sebi ima funkcije koje mogu pozvati iz svog programa, jedino što ne zanam kako.
Ovo je opis funkcije:
Code:

        int HM_upload(UINT port, char address, char FAR* sour_name, char FAR* dest_name)
    Function description
    Upload specified file from terminal (This function will not exit until whole file is uploaded. So user must wait for a while when file’s size is big. If user want to monitor the status of each packet ,please use HM_upload1 and HM_upload2)
    Parameter
    port      :COM port 
               1-n for COM1 - COMn   
        address    :Terminal address range form 'A'-'Y', '0'-'6'
    sour_name    :File name in terminal to be upload
        dest_name    :Assign new file name in PC (include path) If this new file was exist in PC, system will change it to non-exist file name automatically)

Returns
0,3,4,5,0x30,0x33,0x34 (Please return value table)


Ovako sam probao definirati u Delphi-u:
Code:

Function                 HM_Upload
(Port: integer; 
 Adress: WORD;
 SourName: pChar;
 DestName: pChar): word
StdCall; External 'C:\Projekti\XE\Sljedivost\Terminal\Test1\dll23-1\32bits\serial\multi32\MultiDLL.Dll';


i poziv iz programa:
Code:

var i: integer;
    sName, dName: string;
begin
   sName := 'ROBA.TXT';
   DnAME := 'C:\Projekti\XE\Sljedivost\Terminal\Test1\ROBA.TXT';
   i := HM_Upload(3, WORD('A'), @SnAME[1], @DNAME[1]);
   ShowMessage(I.ToString);


compile programa prođe, ne javlja grešku. Run - program se sruši bez greške.
Iz priloženog program sam vidio da se spaja na COM3 i da mu dodjeljuje ime "A".

Nemam iskustva sa pozivanjem funk. iz dll i deklaracijama. Što je krivo? Može pomoć?
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Pozivanje i deklaracija funkcije iz DLL-a19.12.2018. u 14:27 - pre 64 meseci
Koji Delphi koristis? Pogresna ti je deklaracija definitivno.

Pokusaj ovako:

function HM_upload(APort: Cardinal; Address: Char; ASourName PAnsiChar; ADestName: PAnsiChar): Integer; cdecall;

Eventualno stdcall;
 
Odgovor na temu

FranjoZG
Franjo Popović
Programer
Zagreb

Član broj: 328819
Poruke: 298
*.adsl.net.t-com.hr.



+4 Profil

icon Re: Pozivanje i deklaracija funkcije iz DLL-a19.12.2018. u 14:34 - pre 64 meseci
Delphi XE 10. Ovo je bolje jer se program ne ruši, ali nije dobro jer javlja "Access violation...."
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Pozivanje i deklaracija funkcije iz DLL-a19.12.2018. u 15:40 - pre 64 meseci
> Delphi XE 10.

32bit?

> Ovo je bolje jer se program ne ruši, ali nije dobro jer javlja "Access violation....

A kako pozivas, ne smes koristiti string kao u tvom primeru.
 
Odgovor na temu

FranjoZG
Franjo Popović
Programer
Zagreb

Član broj: 328819
Poruke: 298
*.adsl.net.t-com.hr.



+4 Profil

icon Re: Pozivanje i deklaracija funkcije iz DLL-a19.12.2018. u 16:46 - pre 64 meseci
33 bitno
možeš li molim te napisati tih par linija koda. Izludit će me ovo, a trebalo je biti gotovo još prošli tjedan. Naručili pa nikako doći, dokumentacija nikakva...
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Pozivanje i deklaracija funkcije iz DLL-a19.12.2018. u 18:01 - pre 64 meseci
Nesto ovako, ako ne radi promeni calling konvenciju za dll.

Code:

var 
   i: integer;
   sName, dName: AnsiString;
begin
   sName := 'ROBA.TXT';
   DnAME := 'C:\Projekti\XE\Sljedivost\Terminal\Test1\ROBA.TXT';
   i := HM_Upload(3, 'A', PAnsiChar(SnAME), PAnsiChar(dNAME));
   ShowMessage(I.ToString);


> dokumentacija nikakva...

Zar nema neki C primer ili gotov exe koji radi?
 
Odgovor na temu

tkaranovic
Tomislav Karanović
Beograd

Član broj: 220507
Poruke: 307



+18 Profil

icon Re: Pozivanje i deklaracija funkcije iz DLL-a19.12.2018. u 18:44 - pre 64 meseci
Verovatno umesto:

Address: Char

treba:

Address: AnsiChar

 
Odgovor na temu

FranjoZG
Franjo Popović
Programer
Zagreb

Član broj: 328819
Poruke: 298
*.cust.tele2.hr.



+4 Profil

icon Re: Pozivanje i deklaracija funkcije iz DLL-a19.12.2018. u 20:12 - pre 64 meseci
Od dokumentacije ono što sam napisao u prvom postu.
Ovdje se može pruzeti cijeli zip, sa dll-ovima:
https://jumboiskon.tportal.hr/...3f-a4b6-4ad8-b89f-ded510ed8d9c
 
Odgovor na temu

salvaric
Novi Sad

Član broj: 53995
Poruke: 204
*.dynamic.sbb.rs.



+4 Profil

icon Re: Pozivanje i deklaracija funkcije iz DLL-a20.12.2018. u 07:00 - pre 64 meseci
Možda bi trebalo prvo da otvoriš port HM_OpenCommPort, pa nakon učitavanja zatvoriš HM_CloseCommPort
Nikad izvini!
 
Odgovor na temu

tkaranovic
Tomislav Karanović
Beograd

Član broj: 220507
Poruke: 307



+18 Profil

icon Re: Pozivanje i deklaracija funkcije iz DLL-a20.12.2018. u 07:53 - pre 64 meseci
Ja sam previo dll sa delphijem i kad sam previo taj dll onda nije htelo PAnsiChar(SnAME).
Sve je proradilo kad sam stavio ovako da radi:

pStr := StrAsPAnsiChar(Str);

FuncDll(pStr...

StrDispose(pStr);

Sad dali bi to trebalo u ovom slucaju za ovaj dll ne znam.

Inace sa stringom nisam ni probao.

Koliko vidim taj dll daje neka firma. Mozda oni imaju primer i za Delphi kojeg inace spominju.
Najjednostavnije bi bilo prvo njih kontaktirati.
 
Odgovor na temu

MajorFatal
Milija Jakic
opravljam oluke, 1337LAB
Bg

Član broj: 36595
Poruke: 1325
*.dynamic.isp.telekom.rs.



+557 Profil

icon Re: Pozivanje i deklaracija funkcije iz DLL-a20.12.2018. u 23:22 - pre 64 meseci
Ne znam da li je od pomoći ali, jedan drugar dok je demistifikovao te neke bar kod čitače je sve vreme imao ispred sebe odštampane na a4 papiru neke specifične bar kodove koje kad očita oni dovode čitač u određeno stanje, imao je bar nekoliko bar kodova za nekoliko različitih vrsta reseta čitača, sistema, pa kad mu nešto ne ide on očita bar kod za reset pa ispočetka...
Nemoj da pricas?
 
Odgovor na temu

FranjoZG
Franjo Popović
Programer
Zagreb

Član broj: 328819
Poruke: 298
93.140.41.*



+4 Profil

icon Re: Pozivanje i deklaracija funkcije iz DLL-a21.12.2018. u 15:03 - pre 64 meseci
Promjenom vrsi varijabli porgram se ne ruši, ne javi grešku ali niša niti ne napravi.
Riješio na drugi način: gotovi program pozivom s parametrima odradi što treba. Nije elegantno, vidi se prozor koji se otvori pri pozivanju programa, ali radi. Dok ne bude malo više vremena da se tim pozabavim.
U svakom slućaju hvala na pomoći.

MajorFatal, to sa komandnim barkodovima radi kod "običnih" bar kod čitaća, radio sam s njim i radi ok, osim što ima puno manje memorije pa mi stane 512 EAN13 kodova, a meni treba cca 1000. Ovo što imam je terminal (tako ga ovdje zovu) - čitać s ugrađenim kompom i tipkama na sebi. Za njega to ne vrijedi.
 
Odgovor na temu

Milan Milosevic

Član broj: 67
Poruke: 932
*.dynamic.isp.telekom.rs.



+31 Profil

icon Re: Pozivanje i deklaracija funkcije iz DLL-a23.12.2018. u 20:25 - pre 64 meseci
Da li ti radi programče koji si stavio u attacmant?
Nemam čitač barkoda da probam kod ali mogu da testiram procedure iz dlla.

Moraš prvo da otvoriš pa da zatvoriš na kraju port. Evo primera ali ne znam da li radi.
Code:

function HM_OpenCommPort( port:UINT; nComBaud,nComDataBit,nComParity,nComStopBit:integer ):Boolean;
                                    external 'multidll.dll' name 'HM_OpenCommPort';
...

procedure TForm1.Btn_Otvori_PortClick(Sender: TObject);
 Var B:Boolean:
begin
// Com port 1;  7 za 19200bps  Baud Rate; 8-bitni podatak; stop bits 1(1 ili 2);parity 0-NO PARITY
  B:=HM_OpenCommPort(1,7,8,1,0);
   if B then Caption:='radi' else Caption:='ne radi';

end;


Zašto koristiš funkciju HM_upload za očitavanje barkoda? Zar ne bi trebalo HM_Download.



[Ovu poruku je menjao Milan Milosevic dana 24.12.2018. u 14:08 GMT+1]
 
Odgovor na temu

tkaranovic
Tomislav Karanović
Beograd

Član broj: 220507
Poruke: 307



+18 Profil

icon Re: Pozivanje i deklaracija funkcije iz DLL-a28.12.2018. u 12:52 - pre 63 meseci
Zanimalo me kakav je to dll jer on ne moze da se otvori sa LoadLibrary.

Posto me zanimalo zasto nasam sam na netu ovaj pdf:

HT630_Application_Note_for_C_Language.pdf

koji ima ovo poglavlje:

Chapter 6 32 Bits DLL for Delphi
File description
Dir \Delphi
MULTIDLL.DLL DLL (This file is same with \32bit\dll32\multidll.dll)
MULTIPAS.PAS Communication Function declare file (Please include this file to your application ex. {$i multipas.pas })
Dir \Delphi\Sample
PROJECT1.EXE TEST PROGRAM
PROJECT1.DPR Test APPLICATION (Delphi 2.0)
UNIT1.PAS form1 source code
MULTIPAS.PAS same with \delphi\multipas.pas
MULTIDLL.DLL same with \DLL\multidll.dll
BB.JB2 Test file for download

Bas bi me zanimalo kako tah MULTIPAS.PAS koristi dll.

 
Odgovor na temu

FranjoZG
Franjo Popović
Programer
Zagreb

Član broj: 328819
Poruke: 298
*.cust.tele2.hr.



+4 Profil

icon Re: Pozivanje i deklaracija funkcije iz DLL-a29.12.2018. u 19:58 - pre 63 meseci
Hvala na odgovorima, ovo sam riješio pozivom gotovog (priloženog) programa sa parametrima, tako radi. Preko DLL-a nisam uspio. Nije eleganto, program se pojavi ne vrijedi ni SW_HIDE...

- mora HM_UPLOAD jer je to naredba terminalu za upload podataka na komp, a ne kompu za "skidanje" podataka sa terminala
- priložene primjere sam pronašao i isprobao - ne rade...

Ako će netko imati vremena i volje igrati se s time, bio bih zahvalan :)
 
Odgovor na temu

Milan Milosevic

Član broj: 67
Poruke: 932
*.dynamic.isp.telekom.rs.



+31 Profil

icon Re: Pozivanje i deklaracija funkcije iz DLL-a30.12.2018. u 06:35 - pre 63 meseci
Ja imam volje
Jesi li probao HM_OpenCommPort(3,7,8,1,0);
jer sam ja u primeru dao za port 1, čini mi se da si naveo da je uređaj prikačen na port 3
 
Odgovor na temu

tkaranovic
Tomislav Karanović
Beograd

Član broj: 220507
Poruke: 307



+18 Profil

icon Re: Pozivanje i deklaracija funkcije iz DLL-a30.12.2018. u 07:21 - pre 63 meseci
Ja nemam vremena ali imam volje :)
Odnosno zanma me kako radi.

Gotov prilozeni program prvopoziva funkciju 8. Funkciju 8 poziva bez obzira na ime.
To sam utvrdio tako sto sa npravio dll sa istim imenom kad poziva 8 funkciju prvi parametar je iz ini fajla.
Nije mi priruci ini fajl ali je to vrednost u vezi tajmauta i u ini fajlu je 500.
Ako se promeni 500 u 400 onda se vidi iz dll koji sam napravio da program poziva funkciju sa tom vredoscu 400.

Prema tome program poziva sa brojem funkcije a ne sa imenom.
Ovo se moze proveiti na isti nacin na koji sam ja to uradio.

Postoje online vieveri dll-a itako moze da se vidi koja funkcija je osma po redu.

 
Odgovor na temu

Milan Milosevic

Član broj: 67
Poruke: 932
*.dynamic.isp.telekom.rs.



+31 Profil

icon Re: Pozivanje i deklaracija funkcije iz DLL-a30.12.2018. u 10:34 - pre 63 meseci
Postoje programi sa DeAsemblovanje pomoću kojih je moguće videti koje se procedure iz kojih bibljoteka pozivaju, kao i parametri u Asembleru.
Kod ovog programčića ne znam koje dugme koristiš ali program pokazuje da skoro svi dugmići koriste proceduru HM_OpenCommPort.

Inače, video sam da je dll pisan u Visual studio C++ verzija kompajlera 6 što je jako staro.
 
Odgovor na temu

tkaranovic
Tomislav Karanović
Beograd

Član broj: 220507
Poruke: 307



+18 Profil

icon Re: Pozivanje i deklaracija funkcije iz DLL-a30.12.2018. u 10:56 - pre 63 meseci
Pretpostavljam da je replika meni okodugmeta?

Ne korisitm dygme nego startujem samo program i pre nego sto se pojavi pozove funkciju o kojoj sam pisao.
 
Odgovor na temu

Milan Milosevic

Član broj: 67
Poruke: 932
*.dynamic.isp.telekom.rs.



+31 Profil

icon Re: Pozivanje i deklaracija funkcije iz DLL-a30.12.2018. u 11:50 - pre 63 meseci
Ovo su funkcije redom koje poziva program iz multidll.dll pri pokretanju.

HM_set_time_out parametar integer 500
HM_set_ESC_delay parametar integer 30
HM_set_NAK_delay parametar integer 100
HM_set_power_saving_status parametar boolean 1(true) u ini piše Power_Saving=YES
HM_set_upload_file_save_mode integer 0












[Ovu poruku je menjao Milan Milosevic dana 30.12.2018. u 15:50 GMT+1]
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Pozivanje i deklaracija funkcije iz DLL-a

Strane: 1 2

[ Pregleda: 3430 | Odgovora: 28 ] > FB > Twit

Postavi temu Odgovori

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