Проверьте текущую функцию скорости передачи данных SDT_GetCombaud (Iport: Integer; Puibaudrate: Pinteger): Integer; Stdcall; External'sdtapi.dll '; {iport [in] представляет порт, Puibaudrate [Out]. Обычный специальный центр последовательного порта, возвращаемое значение 0x90-Success, сбой открытия 0x1-порт/номер порта является незаконным, 0x5 не может получить скорость передачи SAM_V, а последовательный порт недоступен. }
Установите функцию скорости передачи в серийном порту SAM_V SDT_STETCOMBAUD (IPORT: Integer; Uicurrbaud: Integer; uisetbaud: Integer): Integer; stdcall; Внешний отдача. Чтобы изменить API, скорость передачи ранее установленного сервисного терминала с SAM_V (фабрика дефолта - 115200). Если значение Uicurrbaud не является одним из этих значений, функция возвращает 0x21. Скорость бода SAM_V, установленная UISETBAUD [In], может использоваться только для этих значений (то же самое, что и выше) , 0x1-порт. Ошибка/номер порта является незаконным, 0x2-timeout, настройка не является успешной, входные параметры 0x21-uicurrbaud и uisetbaud неверны}
Открыть серийный порт/функция USB SDT_OPENPORT (Iport: Integer): Integer; Stdcall; External'sdtapi.dll '; {iport [in] представляет номер порта, 1-16 (десятичный)-серийный порт, 1001-1016 (десятичный ) - порт USB, порт USB -устройства по умолчанию составляет 1001. Функция возвращает 0x90 - порт успешно открыт, 1 - порт не удален / номер порта незаконен}
Закрыть последовательный порт/usbfunction sdt_closeport (iport: integer): integer; stdcall; external'sdtapi.dll '; {iport [in] указывает номер порта, возвращаемое значение 0x90 с закрытым последовательный порт успешно, 0x01-порт является незаконным. }
Функция сброса sdt_resetsam (iport: integer; ilfopen: integer): Integer; stdcall; External'sdtapi.dll '; {ipt [in] представляет номер порта в настоящее время. , USB: 1001-1016. Ilfopen [in] означает, что последовательный порт не открыт и закрыт в рамках функции. Значение 0x90 - успешные, другие сбои}
Установите максимальное количество байтов связи функции RF -адаптера sdt_setmaxrfbyte (iport: integer; ucbyte: char; blfopen: integer): integer; stdcall; External'sdtapi.dll '; {ipt [in] Представляет номер порта, Ucbyte [in ] не знака, 24-255, представляет максимальное количество байтов связи Адаптера RF, ilfopen [in] См. SDT_Resetsam возвращаемого значения 0x90-Success, другое обстоятельство}
Выполнить функцию обнаружения статуса на SAM_V SDT_GETSAMSTATUS (IPORT: Integer; Ilfopen: Integer): Integer; 0x60 -self не удалось проверить, неспособный получить команды, другие - команда не удалось}
Прочитайте количество функции SAM_V SDT_GETSAMID (IPORT: Integer; Pussamid: Pbyte; Ilfopen: Integer): Integer; stdcall; External'sdtapi.dll '; {iport [in] указывает номер порта, pussamid [out] unsigned string pointer sam_v номер, 16 байтов, возвращаемое значение 0x90 - успешно, другие - не удалось}
Прочтите количество функции SAM_V SDT_GETSAMIDTOSTR (IPORT: Integer; PCSAMID: PBYTE; ILFOPEN: Integer): Integer; STDCALL; External'sdtapi.dll '; {Iport [in] означает номер порта, Pussamid [out] sam_v, ilfopen [in] Integer, см. SDT_Resetsam return Value 0x90 - Успешное, другое - не удалось}
Начните искать функцию карты SDT_STARTFINDIDCARD (IPORT: Integer; Pucmanainfo: Pbyte; Ilfopen: Integer): Integer; Stdcall; External'sdtapi.dll '; {ipt [in] указывает номер порта, pucmanainfo [Out] Unsigned Poinder, сертификат/ Сертификат/ Номер управления чипом карты, 4 байта, ILFOPEN [in] См. SDT_RESETSAM возвращаемого значения 0x9F-карт успешно, 0x80-карт. Ошибка сбоя} Функция выбора карты SDT_SELECTIDCARD (IPTER: Integer; PUCMANAMSG: PBYTE; ILFOPEN: Integer): Integer; STDCALL; Внешнее издание. Выбор карты не удался}
Читать номер управления картой Функция sdt_readmnginfo (iport: integer; pucmanagemsg: pbyte; ilfopen: integer): integer; stdcall; внешний отдача. Номер управления, 28 байтов, ilfopen [in] return Value 0x90 - Успешное, другое - чтение не удалось}
Прочтите сертификат/карта Фиксированная информационная функция SDT_READBASEMSG (IPORT: Integer; PUCCHMSG: PBYTE; PUICHMSGLEN: PINTEGER; PUCPHMSG: PBYTE; PUIPHMSGLEN: PINTEGER; ILFOPEN: INTEGER): Integer; STDCALL; Extred'sdtapi.dll '; Представляет номер порта, pucchmsg [Out] указывает на информацию о чтении текстовой текст, Puichmsglen [out] указывает на длину информации о прочтении текста Pucphmsg [Out], указывает на информацию о чтении фото, puiphmsglen [out] указывает на информацию о чтении фото, длину, длину фотографии, ilfopen [in] см. SDT_Resetsam return Value 0x90 - успешно прочитать фиксированную информацию, не удалось другое чтение фиксированной информации}
Прочтите дополнительную информацию функцию SDT_ReadnewAppmsg (iport: Integer; Pucappmsg: pbyte; Puiappmsglen: pinteger; ilfopen: Integer): Integer ;; stdcall; External'sdtapi.dll '; {ipt [in] указывает на номер порта, и pucappmsg [Out] Указывает на дополнительную информацию чтение, Puiappmsglen [out] указывает на длину дополнительной информации чтения, Ilfopen [in] см. SDT_Resetsam возвращаемое значение 0x90 - Дополнительная информация для чтения является успешной, другие - не удалась дополнительная информация}}
Функция функции декодирования фото getBmp (wlt_file: pchar, intf: integer): integer; stdcall; external'wltrs.dll '; {wlt_file-wlt имен файла, тип интерфейса устройства для чтения устройства (1-rs-232c, 2-usb) Возвращаемое значение: генерировать *.bmp и следующая возвращаемая информация: 1-фото декодирование является правильной, ошибка 0-вызовов при вызове sdtapi.dll, -1-photo декодирование является ошибкой, -2-WLT. Ошибка открытия файла, -ошибка формата файла 4 -WLT, -5 -Software не авторизована, ошибка соединения -6 -Device}
исходный код:
Unit 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 =' Save Save Save Information, идентификационная информация была автоматически введена в локальную базу данных! '; Tip_icreader_black_card_found =' Лицы, включенные в черный список, были найдены! '; Error_icreader_open_port =' Порт не смог открыть, пожалуйста, проверьте соответствующий порт или повторно подключите считыватель карты! '; typetIdCardInfo = упакованная запись: массив [0..14] из WideChar; Пол: массив [0..0] WideChar; Nation: Array [0..1] WideChar; День рождения: массив [0..7] WideChar; Addr: Array [0..34] of WideChar; Idsn: Array [0..17] WideChar; Mavingorgan: Array [0..14] WideChar; Vaildbegin: Array [0..7] WideChar ; Vaildend: Array [0..7] WideChar; : Integer): Integer; ARD (Iportid: Integer; var puciin: Integer; Эгер) : Integer; DTAPI имя ' SDT_READBASEMSGTOFILE '; Функция GETBMP (File_Name: Pansichar; Intf: Integer): Integer; TStrings; function etnicnotoname (ano: string): string; beginresult: = lstethnic.values [ano]; end; function formatdatestr (Avalue: String): String; beginresult: = copy (Avalue, 1, 4) + '-' + Copy (Avalue, 5, 2) + '-' + copy (Avalue, 7, 2); End; Function Readiccard (var Acardinfo: tidcardinfo; var aerrmsg: string): boolean; variport: Integer; Intopenportrtn: Integer; busbport: Boolean; Edziportid: Integer; Iret: Integer; Puciin: Integer; Edziifopen: Integer; Pucsn: Integer; Puichmsglen: Integer; Puiphmsglen: Integer; fs: tfilestream; idcardinfo: tidcardinfo; // filehandle: integer; // Результат: = false; busbport: = false; edziifopen: = 1; edziportid: = 0; puichmsglen: = 0; puiphmsglen: = 0; // Обнаружение машинного соединения порта USB, вы должны сначала обнаружить USBFOR Iport: = От 1001 до 1016 Dobeginintopenportrtn: = sdt_openport (ipt); если Intopenportrtn = 144 thenbeginedziportid: = ipt; busbport: = true; break; end; // Обнаружение подключения устройства серийного порта, если не Busbport then Begon для iport: = = = = // От 1 до 2 dobeginintopenportrtn: = sdt_openport (iport); if intopenportrtn = 144 thenbeginedziportid: = ipt; busbport: = false; end; end; end; if intopenportrtn <> 144 thenbegin // Application.messagebox (error_icreader_port_port_port_port_port_port_port_port_port_port_port_port_port_port_port_port_port Aerrmsg: = error_icreader_open_port; result: = false; exit; end; // Поиск карты: = sdt_startfindidcard (edziportid, puciin, edziifopen); если iret <> 159 thenbeginiret: = sdt_startfindcard (edziportid, puciin, edzi -ed Ищите карту, если iRet <> 159 ThenBeginsDT_CLOSEPORT (edziportid); // application.messagebox (tip_icreader_no_card, tip_title); aerrmsg: = select_icreader_no_card; результат: = false; exit; end; // select iret: = sdt_selectid , pucsn, edziifopen); если iRet <> 144 ThenBeginire: = sdt_selectidcard (edziportid, pucsn, edziifopen); если iret <> 144 thenbeginsdt_closeport (edziportid); // Application.messagebox (tip_icreader_clearde_trailder _Failed; результат : = False; exit; end; end; // Обратите внимание, что здесь пользователь должен иметь разрешения для чтения и записи текущего каталога приложения, если FileExist ); если FileExists ('zp.bmp') then sysutils.deletefile ('zp.bmp'); if fileexist Str)) iRet: = sdt_readbasemsgtofile (edziportid, pansichar (ansistring ('wz.txt')), puichmsglen, pansichar (ansistring ('zp.wlt')), puiphmsglen, 1); если iret <> thenbeginsd_closeport (edziportid); Если iret <> 144. ; // Application.messagebox (tip_icreader_read_failed, tip_title); aerrmsg: = tip_icreader_read_failed; Результат: = false; exit; end; // следующее, чтобы проанализировать фотографию. Производитель в корневом каталоге диска C, разрешение фотографий потерпит неудачу, если Busbport ThenIret: = getBmp (Pansichar (Ansistring ('zp.wlt')), 2) Electiret: = getBmp (pansichar (ansistring ('zp.wlt' ), 1); Case Iret Of0: beginapplication.messagebox (tip_icreader_call_dll_failed, tip_title); _Failed , Tip_title); end; -3: beginapplication.messagebox (tip_icreader_wlt_file_open_failed, tip_title); end; -4: beginapplication.messagebox (tip_icreader_wlt_file_format_failed, tip_title); ); конец; -6 : beginapplication.messagebox (tip_icreader_device_failed, tip_title); end; end; sdt_closeport (edziportid); Acardinfo)); fs.free; //// name: ansistring (idcardinfo.name); // Пол: если ansistring (idcardinfo.sex) = '1' Тогда пол: = 'male' else Gender: = 'Женщина' ; // Ethnic: EthnicnotoName (Ansistring (idcardinfo.nation)); // Год месяца рождения месяца и дата: formatdatestr (ansistring (idcardinfo.birthday)); // Адрес: адрес: = trem (ansistring (idcardinfo.addr)); // Адрес: = trem (ansistring (idcardinfo.addr)); // Адрес: = trim (ancardinfo.addr)); // Адрес: = trim (ancardinfo.addr)); // адрес: = ; // Идентификационный номер: id: = trim (ansistring (idcardinfo.idsn));//Агентство по выдаче сертификатов: место: = trim (ansistring (idcardinfo.issueorgan)); // Дата платы начинается valiveDatestart: = formatdatest (ansistring (ansistring ( idcardinfo.vaildbegin)); // Дата платы заканчивается, если trim (ansistring (idcardinfo.vaildend)) = 'trim (ansistring (idcardinfo.vaildend)) =' long-term 'then // aldateend: = formatdateTime (' yyy-mm-dd ', maxDateTime) // ensy // ValidDateend: = Formatdatest (Ansistring (idcardinfo.vaildend)); // Результат: = true; end; ' +' = ' +' Mongol '); add ('03' + '=' + 'hui People'); add ('04 ' +' = ' +' Тибетские люди '); добавить ('05' + ' = ' +' Uyghur people '); add ('06' + '=' + 'miao people'); add ('07 ' +' = ' +' yi people '); добавить ('08' + '=' + 'Zhuang People'); add ('09 ' +' = ' +' buyi People '); add (' 10 ' +' = ' +' Quare '); add ('11' + '=' + 'manchu '); Добавить ('12' + '=' + 'dong'); add ('13 ' +' = ' +' yao people '); add (' '14 ' +' = ' +' bai people '); Add ('15 ' +' = ' +' tujia people '); add ('16' + '=' + 'hani people'); add (''17' + '=' + 'kazakhs'); add (' 18 ' +' = ' +' dai People '); add ('19' + '=' + 'li People'); добавить ('20 ' +' = ' +' lisu People '); добавить ('21' + '=' + 'Wa people'); add ('22 ' +' = ' +' she People '); add (' 23 ' +' = ' +' High Mountain Tribe '); Add ('24' + '=' + 'Lahu Tribe'); Add ('25 ' +' = ' +' Aqua Tribe '); Add ('26' + '=' + 'Dongxiang People'); добавить ('27 ' +' = ' +' Naxi people '); add ('28' + '=' + 'jingpo people'); add ('29 ' +' = ' +' kirgiz '); добавить ('30' + '=' + ' Tu '); add ('31' + '=' + 'dahan'); add ('32 ' +' = ' +' mullao '); add ('33' + '=' + 'Qiang'); Добавить ('34' + '=' + 'brown'); add ('35 ' +' = ' +' Salar Tribe '); add ('36' + '=' + 'Maonan Tribe'); Add ('37 ' +' = ' +' Gelao Tribe '); Add ('38' + '=' + 'xibe Tribe'); Add ('39 ' +' = ' +' Achang Tribe '); Add ('40' + '=' + 'Pumi Tribe'); add ('41 ' +' = ' +' Tajik Tribe '); add ('42' + ' +' + 'Nur Tribe'); Add ('43 ' +' = ' +' Uzbek Tribe '); add ('44' + '=' + 'русское племя); добавить (' 45 ' +' = ' +' ewenki '); добавить ('46' + '=' + ' De'ang '); add ('47' + '=' + 'baoan'); add ('48 ' +' = ' +' yugu tribe '); add ('49' + '=' + 'jing tribe '); Add ('50' + '=' + 'tatar tribe'); add ('51 ' +' = ' +' dulong clan '); add ('52' + '=' + 'oqqen clan') ; Add ('53 ' +' = ' +' hezhe clan '); add ('54' + '=' + 'menba'); add ('55 ' +' = ' +' luba '); add (' 56 ' +' = ' +' kino '); add ('57' + '=' + 'etros'); add ('98 ' +' = ' +' foreign Naturalization '); End; infintizationlstethnic.free; end .//Please подготовьте sdtapi.dll wltrs.dll wltrs.lic заранее, вставьте в тот же каталог