ตรวจสอบฟังก์ชั่นอัตราการรับส่งข้อมูลปัจจุบัน SDT_GETCOMBAUD (iPort: จำนวนเต็ม; puibaudrate: pinteger): จำนวนเต็ม; stdcall; external'sdtapi.dll '; {iport [ใน] หมายถึงพอร์ต puibaudrate [ออก] ตัวชี้ที่ไม่ได้ลงชื่อ อัตราพิเศษพอร์ตอนุกรมปกติค่าส่งคืน 0x90-success การเปิด 0x1-port ล้มเหลว/หมายเลขพอร์ตผิดกฎหมาย 0x5 ไม่สามารถรับอัตราการรับส่งข้อมูลของ SAM_V และพอร์ตอนุกรมไม่สามารถใช้ได้ -
ตั้งค่าฟังก์ชั่นอัตรา baud ของพอร์ตอนุกรม sam_v sdt_stetcombaud (iport: จำนวนเต็ม; uicurrbaud: จำนวนเต็ม; uisetbaud: จำนวนเต็ม): จำนวนเต็ม; stdcall; external'sdtapi.dll '; {iport [ใน] หมายถึงพอร์ต ในการเปลี่ยน API อัตราการรับส่งข้อมูลของการสื่อสารเทอร์มินัลบริการก่อนหน้านี้กับ SAM_V (ค่าเริ่มต้นจากโรงงานคือ 115200) หากค่า UICurrbaud ไม่ใช่หนึ่งในค่าเหล่านี้ฟังก์ชั่นจะส่งคืน 0x21 อัตราการรับส่งข้อมูล SAM_V ที่จะถูกตั้งค่าโดย UISETBAUD [ใน] สามารถใช้สำหรับค่าเหล่านั้น (เช่นเดียวกับด้านบน) , การเปิด 0x1- พอร์ตล้มเหลว/หมายเลขพอร์ตผิดกฎหมาย 0x2-timeout การตั้งค่าไม่สำเร็จพารามิเตอร์อินพุตของ 0x21-uicurrbaud และ Uisetbaud ไม่ถูกต้อง}
เปิดพอร์ตอนุกรม/ฟังก์ชั่น USB SDT_OPENPORT (iPort: จำนวนเต็ม): จำนวนเต็ม; stdcall; external'sdtapi.dll '; {iport [ใน] หมายถึงหมายเลขพอร์ต 1-16 (ทศนิยม) เป็นพอร์ตอนุกรม 1001-1016 (ทศนิยม ) คือพอร์ต USB พอร์ตอุปกรณ์ USB เริ่มต้นคือ 1001 ฟังก์ชั่นส่งคืน 0x90 - พอร์ตเปิดสำเร็จ 1 - พอร์ตล้มเหลว / หมายเลขพอร์ตนั้นผิดกฎหมาย}
ปิดพอร์ตอนุกรม/usbfunction sdt_closeport (iport: จำนวนเต็ม): จำนวนเต็ม; stdcall; external'sdtapi.dll '; {iport [ใน] ระบุหมายเลขพอร์ตคืนค่า 0x90 ปิดพอร์ตอนุกรม }
รีเซ็ตฟังก์ชั่น SDT_RESETSAM (IPORT: Integer; Ilfopen: Integer): จำนวนเต็ม; stdcall; External'sdtapi.dll '; {iport [ใน] แสดงถึงหมายเลขพอร์ต , USB: 1001-1016 Ilfopen [ใน] หมายความว่าพอร์ตอนุกรมไม่ได้เปิดและปิดภายในฟังก์ชั่น ค่า 0x90 - ประสบความสำเร็จความล้มเหลวอื่น ๆ }
ตั้งค่าจำนวนสูงสุดของการสื่อสารไบต์ของฟังก์ชั่นอะแดปเตอร์ RF SDT_SETMAXRFBYTE (iPort: จำนวนเต็ม; UCBYTE: Char; blfopen: จำนวนเต็ม): จำนวนเต็ม; stdcall; external'sdtapi.dll '; ] เป็นอักขระที่ไม่ได้ลงชื่อ 24-255 แสดงถึงจำนวนสูงสุดของไบต์การสื่อสารของอะแดปเตอร์ RF, ilfopen [ใน] ดู SDT_RESETSAM ค่าคืนค่า 0x90-success, failure อื่น ๆ }
ทำหน้าที่ตรวจจับสถานะบน SAM_V SDT_GETSAMSTATUS (Iport: Integer; Ilfopen: Integer): จำนวนเต็ม; 0x60 -self ไม่สามารถตรวจสอบไม่สามารถรับคำสั่ง, คำสั่งอื่น ๆ - คำสั่งล้มเหลว}
อ่านจำนวนฟังก์ชั่น sam_v sdt_getsamid (iport: จำนวนเต็ม; pussamid: pbyte; ilfopen: จำนวนเต็ม): จำนวนเต็ม; stdcall; external'sdtapi.dll '; {iport [ใน] หมายถึงหมายเลขพอร์ต หมายเลข, 16 ไบต์, ค่าส่งคืน 0x90 - สำเร็จ, อื่น ๆ - ล้มเหลว}
อ่านจำนวนฟังก์ชั่น SAM_V SDT_GETSAMIDTOSTR (iPort: จำนวนเต็ม; pcsamid: pbyte; ilfopen: จำนวนเต็ม): จำนวนเต็ม; stdcall; external'sdtapi.dll '; {iport [ใน] หมายถึงหมายเลขพอร์ต [ใน] จำนวนเต็มดู SDT_RESETSAM ค่าคืนค่า 0x90 - สำเร็จ, อื่น ๆ - ล้มเหลว}
เริ่มมองหาฟังก์ชั่นการ์ด SDT_STARTFINDIDCARD (iPort: จำนวนเต็ม; pucmanainfo: pbyte; ilfopen: จำนวนเต็ม): จำนวนเต็ม; stdcall; external'Sdtapi.dll '; {iport [ใน] หมายถึงหมายเลขพอร์ต Pucmanainfo หมายเลขการจัดการชิปการ์ด, 4 ไบต์, ilfopen [ใน] ดู SDT_RESETSAM ค่าคืนค่า 0x9F-Card การค้นหาสำเร็จการค้นหา 0x80-card ล้มเหลว} ฟังก์ชั่นการเลือกการ์ด SDT_SELECTIDCARD (iPort: Integer; Pucmanamsg: Pbyte; External'sdtapi.dll '; {iport [in] ระบุหมายเลขพอร์ต, pucmanamsg [out] ตัวชี้ที่ไม่ได้ลงนาม, หมายเลขซีเรียลใบรับรอง/การ์ดชิป, 8 ไบต์, ilfopen [ใน] ดู SDT_RESETSAM การเลือกการ์ดล้มเหลว}
อ่านฟังก์ชั่นการจัดการบัตร SDT_READMNGINFO (iPort: จำนวนเต็ม; pucmanagemsg: pbyte; ilfopen: จำนวนเต็ม): จำนวนเต็ม; stdcall; external'Sdtapi.dll '; หมายเลขการจัดการ, 28 ไบต์, ilfopen [ใน] ค่าส่งคืน 0x90 - ประสบความสำเร็จ, อื่น ๆ - อ่านล้มเหลว}
อ่านใบรับรอง/การ์ดฟังก์ชั่นข้อมูลคงที่ SDT_READBASEMSG (iPort: จำนวนเต็ม; pucchmsg: pbyte; puichmsglen: pinteger; pucphmsg: pbyte; puiphmsglen: pinteger; ilfopen: จำนวนเต็ม): จำนวนเต็ม; แสดงถึงหมายเลขพอร์ต pucchmsg [out] ชี้ไปที่ข้อมูลการอ่านข้อความ puichmsglen [ออก] ชี้ไปที่ความยาวข้อมูลข้อความอ่านความยาว pucphmsg [ออก] ชี้ไปที่ข้อมูลการอ่าน puiphmsglen [ออก] ชี้ไปที่ความยาวข้อมูลภาพอ่าน ilfopen [ใน] ดู SDT_RESETSAM ค่าคืนค่า 0x90 - อ่านข้อมูลคงที่สำเร็จแล้วข้อมูลการอ่านอื่น ๆ ที่คงที่การอ่านอื่น ๆ ล้มเหลว}
อ่านฟังก์ชั่นข้อมูลเพิ่มเติม sdt_readnewappmsg (iport: จำนวนเต็ม; pucappmsg: pbyte; puiappmsglen: pinteger; ilfopen: จำนวนเต็ม): จำนวนเต็ม; ชี้ไปที่ข้อมูลเพิ่มเติมอ่าน puiappmsglen [ออก] ชี้ไปที่ความยาวข้อมูลเพิ่มเติมอ่าน ilfopen [ใน] ดู SDT_RESETSAM ค่าคืนค่า 0x90 - ข้อมูลเพิ่มเติมอ่านสำเร็จแล้วอื่น ๆ - ข้อมูลเพิ่มเติมอ่านล้มเหลว}
ฟังก์ชั่นการถอดรหัสภาพถ่ายฟังก์ชั่น getBMP (WLT_FILE: PCHAR, INTF: จำนวนเต็ม): จำนวนเต็ม; stdcall; external'wltrs.dll '; {wlt_file-wlt ชื่อไฟล์ intf อุปกรณ์การสื่อสาร INTF (1-RS-232C, 2-USB) ค่าส่งคืน: สร้าง *.bmp และข้อมูลการส่งคืนต่อไปนี้: การถอดรหัส 1-photo ถูกต้องข้อผิดพลาด 0-call ในการโทร sdtapi.dll, -1-photo decoding คือข้อผิดพลาด, ข้อผิดพลาดต่อท้ายไฟล์ -2-wlt, -3-wlt ข้อผิดพลาดในการเปิดไฟล์ -ข้อผิดพลาดรูปแบบไฟล์ 4 -WLT, -5 -software ไม่ได้รับอนุญาต, ข้อผิดพลาดการเชื่อมต่อ -6 -Device}}
ซอร์สโค้ด:
idreader หน่วย; กรุณาเปลี่ยนการ์ด! '; TIP_ICREADER_READ_FAILED =' การอ่านการ์ดล้มเหลว! '; tip_icreader_call_dll_failed =' การเรียกเกิดข้อผิดพลาดการโทร sdtapi.dll! '; TIP_ICREADER_PICTURE_DECODE_FAILED =' ข้อผิดพลาดในการถอดรหัสรูปภาพ! '; TIP_ICREADER_WLT_FILE_EXTEND_FAILED =' ข้อต่อท้ายไฟล์ WLT! '; TIP_ICREADER_WLT_FILE_OPEN_FAILED =' ข้อผิดพลาดในการเปิดไฟล์ WLT! '; TIP_ICREADER_WLT_FILE_FORMAT_FAILED =' รูปแบบไฟล์ WLT ผิด! '; tip_icreader_no_license =' ซอฟต์แวร์ไม่ได้รับอนุญาต! '; TIP_ICREADER_DEVICE_FAILED =' ข้อผิดพลาดการเชื่อมต่ออุปกรณ์! '; tip_print_no_card_found =' ไม่พบข้อมูลที่เกี่ยวข้องกับบัตรประจำตัวประชาชน '; TIP_ICREADER_SAVE_SUCCESS =' บันทึกได้สำเร็จข้อมูลประจำตัวได้ถูกป้อนลงในฐานข้อมูลท้องถิ่นโดยอัตโนมัติ! '; tip_icreader_black_card_found =' พบบุคคลที่รวมอยู่ในบัญชีดำ! '; ERROR_ICREADER_OPEN_PORT =' พอร์ตไม่สามารถเปิดได้โปรดตรวจสอบพอร์ตที่เกี่ยวข้องหรือเชื่อมต่อเครื่องอ่านการ์ดอีกครั้ง! '; TypetIdCardInfo = บันทึกชื่อ: อาร์เรย์ [0..14] ของ Widechar; Sex: Array [0..0] ของ Widechar; Nation: Array [0..1] ของ Widechar; วันเกิด: Array [0..7] ของ widechar; addr: array [0..34] ของ Widechar; idsn: อาร์เรย์ [0..17] ของ Widechar; ปัญหา: อาร์เรย์ [0..14] ของ Widechar; Vaildbegin: Array [0..7] ของ Widechar ; Vaildend: Array [0..7] ของ Widechar; : Integer): stdcall; Idcard (iportid: จำนวนเต็ม; var puciin: จำนวนเต็ม; : จำนวนเต็ม) : Integer; ชื่อ dll_sdtapi ' SDT_READBASEMSGTOFILE '; ฟังก์ชั่น getBMP (file_name: pansichar; intf: จำนวนเต็ม): จำนวนเต็ม; :: TSTRINGS; ฟังก์ชั่น etnicNotOname (ano: string): string; engreesult: = lstethnic.values [ano]; end; formateddatestr (avalue: string): string; artryresult: = copy (avalue, 1, 4) + '-' + ' Copy (Avalue, 5, 2) + '-' + Copy (Avalue, 7, 2); end; function readiccard (var acardinfo: tidcardinfo; var aerrmsg: สตริง): บูลีน; variport: จำนวนเต็ม; บูลีน; edziportid: จำนวนเต็ม; iret: จำนวนเต็ม; puciin: จำนวนเต็ม; edziifopen: จำนวนเต็ม; pucsn: จำนวนเต็ม; puichmsglen: จำนวนเต็ม; puiphmsglen: integer; // ผลลัพธ์: = false; busbport: = false; edziifopen: = 1; edziportid: = 0; puichmsglen: = 0; puiphmsglen: = 0; // ตรวจพบการเชื่อมต่อเครื่องของพอร์ต USB = 1001 ถึง 1016 Dobeginintopenportrtn: = sdt_openport (iport); ถ้า intopenportrtn = 144 thenebeginedziportid: = iport; busbport: = true; break; end; // การตรวจจับการเชื่อมต่ออุปกรณ์ของพอร์ตอนุกรม 1 ถึง 2 dobeginintopenportrtn: = sdt_openport (iport); ถ้า intopenportrtn = 144 thenebeginedziportid: = iport; busbport: = false; break; end; end; aerrmsg: = error_icreader_open_port; ผลลัพธ์: = false; exit; end; // มองหา card iret: = sdt_startfindidcard (edziportid, puciin, edziifopen); ถ้า iret <> 159 thebeGiniRet: = sdt_startfindididid, มองหาการ์ดถ้า iret <> 159 thenebeginsdt_closeport (edziportid); // application.messagebox (tip_icreader_no_card, tip_title); aerrmsg: = tip_icreader_no_card; , pucsn, edziifopen); ถ้า iret <> 144 thenbeginiRet: = sdt_selectidcard (edziportid, pucsn, edziifopen); ถ้า iret <> 144 thenbeginsdt_closeport (edziportid); read_failed; ผลลัพธ์ : = false; exit; end; end; // โปรดทราบว่าที่นี่ผู้ใช้จะต้องอ่านและเขียนสิทธิ์ในไดเรกทอรีปัจจุบันของแอปพลิเคชันถ้า fileexists ('wz.txt') จากนั้น sysutils.deleetefile ('wz.txt' ); ถ้า fileexists ('zp.bmp') ดังนั้น sysutils.deletefile ('zp.bmp'); ถ้า fileexists ('zp.wlt') จากนั้น sysutils.deletefile ('zp.wlt'); // pansichar (ansistring (ansistring str)) iret: = sdt_readbasemsgtofile (edziportid, pansichar (ansistring ('wz.txt')), puichmsglen, pansichar (ansistring ('zp.wlt')), puiphmsglen, 1); ; // application.messagebox (TIP_ICREADER_READ_FAILED, TIP_TITLE); AERRMSG: = TIP_ICREADER_READ_FAILED; ผลลัพธ์: = FALSE; ออก; end; // ต่อไปนี้คือการแยกวิเคราะห์รูปภาพ ผู้ผลิตในไดเรกทอรีรูทของดิสก์ C ความละเอียดภาพถ่ายจะล้มเหลวหาก busbport theniret: = getBmp (pansichar (ansistring ('zp.wlt')), 2) elseiret: = getBmp (pansichar (ansistring ('zp.wlt' ), 1); Case IRET of0: การเริ่มต้นใช้งาน MessageBox (TIP_ICREADER_CALL_DLL_FAILED, TIP_TITLE); เอ็ด , tip_title); end; -3: startApplication.messageBox (tip_icreader_wlt_file_open_failed, tip_title); end; จบ; -6 : startApplication.messageBox (TIP_ICREADER_DEVICE_FAILED, TIP_TITLE); end; end; sdt_closeport (edziportid); fs: = tfilestream.create ('wz.txt' acardinfo)); fs.free; /////////////////////////elh ; // ชาติพันธุ์: ethnicnotoname (ansistring (idcardinfo.nation)); // ปีเกิดเดือนและวันที่: FormatDatestr (ansistring (idcardinfo.birthday)); // ที่อยู่: ที่อยู่: = Trim (ansistring ; // หมายเลข id: id: = trim (ansistring (idcardinfo.idsn));//ใบรับรองหน่วยงานที่ออก: สถานที่: = trim (ansistring (idcardinfo.issueorgan)); idcardinfo.vaildbegin)); // วันที่ค่าธรรมเนียมสิ้นสุดลงถ้า trim (ansistring (idcardinfo.vaildend)) = 'ระยะยาว' แล้ว // validdateend: = formatDateTime ('yyy-mm-dd', maxdatetime) ValidDateend: = formatDatestr (ansistring (idcardinfo.vaildend)); // result: = true; end; ' +' = ' +' Mongol '); เพิ่ม ('03' + '=' + 'hui people'); เพิ่ม ('04 ' +' = ' +' คนทิเบต '); เพิ่ม ('05' + ' = ' +' uyghur people '); เพิ่ม ('06' + '=' + 'miao people'); เพิ่ม ('07 ' +' = ' +' yi people '); เพิ่ม ('08' + '=' + 'zhuang people'); เพิ่ม ('09 ' +' = ' +' buyi people '); เพิ่ม (' 10 ' +' = ' +' เกาหลี '); เพิ่ม ('11' + '=' + 'manchu '); เพิ่ม ('12' + '=' + 'dong'); เพิ่ม ('13 ' +' = ' +' คน yao '); เพิ่ม ('14' + '=' + 'คน bai'); เพิ่ม ('15 ' +' = ' +' คน tujia '); เพิ่ม ('16' + '=' + 'คน Hani'); เพิ่ม ('17 ' +' = ' +' kazakhs '); เพิ่ม (' 18 ' +' = ' +' คน dai '); เพิ่ม ('19' + '=' + 'li people'); เพิ่ม ('20 ' +' = ' +' lisu people '); เพิ่ม ('21' + '=' + 'wa people'); เพิ่ม ('22 ' +' = ' +' she people '); เพิ่ม (' 23 ' +' = ' +' High Mountain Tribe '); เพิ่ม ('24' + '=' + 'Lahu Tribe'); เพิ่ม ('25 ' +' = ' +' Aqua Tribe '); เพิ่ม ('26' + '=' + 'Dongxiang People'); เพิ่ม ('27 ' +' = ' ' +' คน naxi '); เพิ่ม ('28' + '=' + 'jingpo people'); เพิ่ม ('29 ' +' = ' +' kirgiz '); เพิ่ม ('30' + '=' + ' tu '); เพิ่ม ('31' + '=' + 'dahan'); เพิ่ม ('32 ' +' = ' +' mullao '); เพิ่ม ('33' + '=' + 'qiang'); ('34' + '=' + 'Brown'); เพิ่ม ('35 ' +' = ' +' Salar Tribe '); เพิ่ม ('36' + '=' + 'Maonan Tribe'); เพิ่ม ('37 ' +' = ' +' Gelao Tribe '); เพิ่ม ('38' + '=' + 'Tribe Xibe'); เพิ่ม ('39 ' +' = ' +' Achang Tribe '); เพิ่ม ('40' + '=' + 'Pumi Tribe'); เพิ่ม ('41 ' +' = ' +' Tajik Tribe '); เพิ่ม ('42' + '=' + 'Nur Tribe'); เพิ่ม ('43 ' +' = ' ' +' Uzbek Tribe '); เพิ่ม ('44' + '=' + 'เผ่ารัสเซีย'); เพิ่ม ('45' + '=' + 'ewenki'); เพิ่ม ('46 ' +' = ' +' de'ang '); เพิ่ม ('47' + '=' + 'baoan'); เพิ่ม ('48 ' +' = ' +' เผ่ายูกู '); เพิ่ม ('49' + '=' + 'Jing Tribe '); เพิ่ม ('50' + '=' + 'Tatar Tribe'); เพิ่ม ('51 ' +' = ' +' Dulong Clan '); เพิ่ม ('52' + '=' + 'Oqqen Clan') ; เพิ่ม ('53 ' +' = ' +' HEZHE CLAN '); เพิ่ม ('54' + '=' + 'menba'); เพิ่ม ('55 ' +' = ' +' luba '); เพิ่ม (' 56 ' +' = ' +' kino '); เพิ่ม ('57' + '=' + 'อื่น ๆ '); เพิ่ม ('98 ' +' = ' +' การแปลงธรรมชาติจากต่างประเทศ '); สิ้นสุด; .//please เตรียม sdtapi.dll wltrs.dll wltrs.lic ล่วงหน้าใส่ในไดเรกทอรีเดียวกัน