[ FranjoZG @ 19.12.2018. 12:36 ] @
| 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ć? |
[ savkic @ 19.12.2018. 14:27 ] @
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;
[ FranjoZG @ 19.12.2018. 14:34 ] @
Delphi XE 10. Ovo je bolje jer se program ne ruši, ali nije dobro jer javlja "Access violation...."
[ savkic @ 19.12.2018. 15:40 ] @
> 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.
[ FranjoZG @ 19.12.2018. 16:46 ] @
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...
[ savkic @ 19.12.2018. 18:01 ] @
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?
[ tkaranovic @ 19.12.2018. 18:44 ] @
Verovatno umesto:
Address: Char
treba:
Address: AnsiChar
[ FranjoZG @ 19.12.2018. 20:12 ] @
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
[ salvaric @ 20.12.2018. 07:00 ] @
Možda bi trebalo prvo da otvoriš port HM_OpenCommPort, pa nakon učitavanja zatvoriš HM_CloseCommPort
[ tkaranovic @ 20.12.2018. 07:53 ] @
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.
[ MajorFatal @ 20.12.2018. 23:22 ] @
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...
[ FranjoZG @ 21.12.2018. 15:03 ] @
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.
[ Milan Milosevic @ 23.12.2018. 20:25 ] @
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]
[ tkaranovic @ 28.12.2018. 12:52 ] @
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.
[ FranjoZG @ 29.12.2018. 19:58 ] @
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 :)
[ Milan Milosevic @ 30.12.2018. 06:35 ] @
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
[ tkaranovic @ 30.12.2018. 07:21 ] @
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.
[ Milan Milosevic @ 30.12.2018. 10:34 ] @
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.
[ tkaranovic @ 30.12.2018. 10:56 ] @
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.
[ Milan Milosevic @ 30.12.2018. 11:50 ] @
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]
[ tkaranovic @ 30.12.2018. 11:58 ] @
Ja sam pisao o prvoj. This 500 je iz ini fajla.
[ Milan Milosevic @ 30.12.2018. 13:22 ] @
Sve se uklapa po ini podešavanju
Evo spisak po brojevima svih procedura u dll
Code:
00000001 00001130 0000 0000E32B HM_OpenCommPort
00000002 00001250 0001 0000E2DB HM_CloseCommPort
00000003 000015B0 0002 0000E636 HM_poll
00000004 000012A0 0003 0000E850 HM_time_delay
00000005 000012E0 0004 0000E7B8 HM_set_power_saving_status
00000006 000012F0 0005 0000E56F HM_get_power_saving_status
00000007 00001320 0006 0000E554 HM_get_power_saving_return
00000008 00001330 0007 0000E5C1 HM_get_time_out
00000009 00001340 0008 0000E7D3 HM_set_time_out
0000000A 00001350 0009 0000E6DD HM_set_ESC_delay
0000000B 00005E90 000A 0000E4F5 HM_get_ESC_delay
0000000C 00001370 000B 0000E6EE HM_set_NAK_delay
0000000D 00001360 000C 0000E506 HM_get_NAK_delay
0000000E 00001380 000D 0000E8CB HM_warm_start
0000000F 00001420 000E 0000E5EE HM_kermit
00000010 00005E30 000F 0000E371 HM_bar_tab
00000011 00005B60 0010 0000E37C HM_buzzer
00000012 00001730 0011 0000E3AA HM_cold_start
00000013 00005DF0 0012 0000E3B8 HM_comm_tab
00000014 00005E50 0013 0000E3C4 HM_date_time
00000015 00001950 0014 0000E3D1 HM_delete
00000016 00005E10 0015 0000E42F HM_dev_tab
00000017 00001AF0 0016 0000E43A HM_dir
00000018 00003640 0017 0000E498 HM_download
00000019 00003C10 0018 0000E45A HM_download1
0000001A 000041B0 0019 0000E48B HM_download2
0000001B 000017B0 001A 0000E4B0 HM_exec
0000001C 00004CF0 001B 0000E4B8 HM_exec_file
0000001D 00004E80 001C 0000E841 HM_terminal_id
0000001E 000056F0 001D 0000E4A4 HM_exe_size
0000001F 00005020 001E 0000E4C5 HM_file_exist
00000020 000058C0 001F 0000E5F8 HM_keypad
00000021 00005E70 0020 0000E62A HM_password
00000022 000022F0 0021 0000E63E HM_power_saving_off
00000023 00002460 0022 0000E652 HM_power_saving_on
00000025 00005250 0024 0000E665 HM_ram_size
00000026 00002150 0025 0000E693 HM_run
00000027 00001E40 0026 0000E6A8 HM_send_data
00000028 00004620 0027 0000E6B5 HM_sendback
00000029 00004BB0 0028 0000E6FF HM_set_address
0000002A 00005DD0 0029 0000E835 HM_term_tab
0000002B 000026F0 002A 0000E8A0 HM_upload
0000002C 00002D20 002B 0000E86A HM_upload1
0000002D 00003310 002C 0000E895 HM_upload2
0000002E 000025B0 002D 0000E8AA HM_upload_mode
0000002F 000055A0 002E 0000E8B9 HM_ups
00000030 00004610 002F 0000E2AC HM_320_field_port
00000031 00004610 0030 0000E2BE HM_320_min_len
00000032 00004610 0031 0000E2CD HM_320_record
00000033 00001310 0032 0000E5A5 HM_get_return_string_length
00000034 000026D0 0033 0000E7E3 HM_set_upload_file_save_mode
00000035 000026E0 0034 0000E5D1 HM_get_upload_file_save_mode
00000036 00001300 0035 0000E8C0 HM_version
00000037 00005A10 0036 0000E826 HM_system_font
0000003C 00004810 003B 0000E355 HM_autoboot
0000003D 00006930 003C 0000E237 HC_getch
0000003E 00006940 003D 0000E2A3 HC_putch
0000003F 00004610 003E 0000E26C HC_modem_cmd
00000040 00006950 003F 0000E279 HC_modem_cmd_mode
00000041 00005EA0 0040 0000E85E HM_upload11
00000042 000060E0 0041 0000E889 HM_upload22
00000043 00006360 0042 0000E44C HM_download11
00000044 000065F0 0043 0000E47D HM_download22
00000045 00006B10 0044 0000E386 HM_cancel_download
00000046 00006CD0 0045 0000E399 HM_cancel_upload
00000047 00006FE0 0046 0000E4E7 HM_flash_size
00000048 00007180 0047 0000E4D3 HM_firmware_version
00000049 00001CD0 0048 0000E441 HM_dir_ROM
0000004A 00001FD0 0049 0000E69A HM_send_data1
0000004B 00004610 004A 0000E31A HM_MR320_trigger
0000004C 00007340 004B 0000E810 HM_stop_communication
0000004D 00007350 004C 0000E28B HC_modem_return_message
0000004E 000030F0 004D 0000E875 HM_upload1_continue
0000004F 00003F00 004E 0000E467 HM_download1_continue
00000050 00001280 004F 0000E33B HM_SetRetryTimes
00000051 00001290 0050 0000E309 HM_GetRetryTimes
00000052 000049B0 0051 0000E361 HM_autoboot_rom
00000053 00007380 0052 0000E25E HC_modem_Init
00000054 000074C0 0053 0000E240 HC_modem_Dial
00000055 00007380 0054 0000E24E HC_modem_Hangup
00000056 000076E0 0055 0000E770 HM_set_card_data
00000057 000077B0 0056 0000E781 HM_set_card_data_name
00000058 00007880 0057 0000E761 HM_set_card_ID
00000059 000078E0 0058 0000E517 HM_get_card_ID
0000005A 000079B0 0059 0000E727 HM_set_app_set
0000005B 00007A10 005A 0000E797 HM_set_card_name
0000005C 00007A70 005B 0000E7A8 HM_set_card_pin
0000005D 00007AD0 005C 0000E74B HM_set_card_APB_level
0000005E 00007B30 005D 0000E736 HM_set_card_APB_flag
0000005F 00007B90 005E 0000E407 HM_delete_card
00000060 00007BF0 005F 0000E3DB HM_delete_all_card
00000061 00007C40 0060 0000E70E HM_set_all_card_APB_flag
00000062 00007CA0 0061 0000E53E HM_get_one_input_data
00000063 00007D60 0062 0000E416 HM_delete_one_input_data
00000064 00007DB0 0063 0000E526 HM_get_input_data_count
00000065 00007EA0 0064 0000E3EE HM_delete_all_input_data
00000066 00007EF0 0065 0000E58A HM_get_previous_input_data
00000067 00007FC0 0066 0000E616 HM_open_door_period
00000068 00008020 0067 0000E2EC HM_Emergency_open_close_door
00000069 00008080 0068 0000E602 HM_open_door_always
0000006A 000080E0 0069 0000E687 HM_reset_DO
0000006B 00008130 006A 0000E34C HM_alarm
0000006C 00008190 006B 0000E800 HM_show_message
0000006D 00008200 006C 0000E6C1 HM_set_DO
0000006E 00008260 006D 0000E6CB HM_set_DO_channel
0000006F 000082D0 006E 0000E671 HM_read_DI
00000070 00008390 006F 0000E67C HM_read_DO
[Ovu poruku je menjao Milan Milosevic dana 30.12.2018. u 14:36 GMT+1]
[ FranjoZG @ 30.12.2018. 18:37 ] @
dečki, hvala na trudu. probam pa javim. problem je što sam terminal morao isporučiti pa ću morati k njima tak da ne očekujete brzo rezultat.
[ tkaranovic @ 30.12.2018. 19:04 ] @
Nadam se se "decki" odnosi na sva moguca godista :)
[ tkaranovic @ 31.12.2018. 09:23 ] @
Dodacu i ono sto je mene zanimalo oko ovog dll :)
DLL nema DLLMAIN funckicju i zato ne moze da se otvodi sa LoadLibrary.
Moze da se otvori ovako:
LoadLibraryEx(PChar(OpenDialog1.FileName), 0, DONT_RESOLVE_DLL_REFERENCES);
Naravno moze i na gore opisan nacin i jedino su razlicite arese koje ce imati funkcije.
[ FranjoZG @ 01.01.2019. 15:06 ] @
Hvala na pomoći, kad malo očistim prijelaz godine, primit ću se opet toga.
tkaranović, sumljam da ima ovdje starijih (59), a žao mi je što nema cura... :)
[ tkaranovic @ 01.01.2019. 16:28 ] @
Opa, ja sam bio ubedjen da je tesko (ovde) biti stariji (53) od mene :)
Onda bolje da ne sirimo tu i ostale teme...
Samo cu dodati da mi svi (uzivo) daju manje godina nego sto imam :)
[ FranjoZG @ 02.01.2019. 08:42 ] @
tkaranovic, i ženske ili samo muški? :)
I meni se čini da imam manje nego što piše na krsnom listu, ali...
[ tkaranovic @ 02.01.2019. 10:25 ] @
Pisao sam samo o prvom utisku onih koji me ne znaju.
Tako da je prvi utisak za sve isti :)
Ja nisam pisao kako se ja osecam nego kako me drugi vide :)
Necu vise na ovu temo pisati i cudi me da moderator vec ne reaguje ;)
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|