تحقق من دالة معدل البذرة الحالية sdt_getcombaud (iport: integer ؛ puibaudrate: pinteger): integer ؛ stdcall ؛ external'sdtapi.dll '؛ المعدل الخاص للمنفذ التسلسلي العادي ، وقيمة الإرجاع 0x90-SUCCESS ، وفتح 0x1-PORT ، رقم المنفذ غير قانوني ، لا يمكن الحصول على معدل باود SAM_V ، والمنفذ التسلسلي غير متوفر. }
قم بتعيين وظيفة معدل Baud لمنفذ SAM_V SDT_STETCOMBAUD (iPort: integer ؛ uicurrbaud: integer ؛ uisetbaud: integer): integer ؛ stdcall ؛ لتغيير API ، يمكن أن يكون معدل Baud للاتصالات المحددة سابقًا مع SAM_V (المصنع هو 115200). إذا كانت قيمة UICurrbaud ليست واحدة من هذه القيم ، فإن الوظيفة تُرجع 0x21. يمكن استخدام معدل Baud Sam_V بواسطة UISETBAUD [في] فقط لتلك القيم (كما هو موضح أعلاه) ، رقم 0x1-PORT ، رقم المنفذ غير قانوني ، 0x2-timeout ، لا ينجح الإعداد ، معلمات الإدخال من 0x21-uicurrbaud و UisetBaud غير صحيحة}
فتح المنفذ التسلسلي/وظيفة USB sdt_openport (iPort: integer): integer ؛ stdcall ؛ external'sdtapi.dll '؛ ) هو منفذ USB ، منفذ جهاز USB الافتراضي هو 1001. إرجاع الوظيفة 0x90 - يتم فتح المنفذ بنجاح ، 1 - يتم فشل المنفذ / رقم المنفذ غير قانوني}
أغلق المنفذ التسلسلي/USBFunction SDT_CLOSEPORT (IPORT: integer): integer ؛ stdcall ؛ external'sdtapi.dll '؛ {iPort [in] }
إعادة تعيين وظيفة SDT_RESETSAM (IPOR: integer ؛ ilfopen: integer): integer ؛ stdcall ؛ external'sdtapi.dll '؛ {iPort [in] يمثل رقم المنفذ. ، USB: 1001-1016. Ilfopen [في] يعني أن المنفذ التسلسلي لا يتم فتحه وإغلاقه في الوظيفة. القيمة 0x90 - ناجحة ، فشل آخر}
قم بتعيين الحد الأقصى لعدد بايت الاتصالات لوظيفة محول RF SDT_SETMAXRFBYTE (iPort: integer ؛ ucbyte: char ؛ blfopen: integer): integer ؛ stdcall ؛ external'sdtapi.dll ' ] هو الحرف غير موقّع ، 24-255 ، يمثل الحد الأقصى لعدد بايت الاتصالات لمحول RF ، Ilfopen [في] راجع قيمة إرجاع SDT_Resetsam 0x90-SUCCESS ، غيرها من الفاعل}
أداء وظيفة الكشف عن SAM_V SDT_GETSAMSTATUS (IPOR: ILFOPEN: integer) 0x60 - فشل الذات في التحقق ، غير قادر على استلام الأوامر ، والآخر - فشل الأمر}
اقرأ عدد وظيفة sam_v sdt_getsamid (iport: integer ؛ pussamid: pbyte ؛ ilfopen: integer): integer ؛ stdcall ؛ external'sdtapi.dll '؛ الرقم ، 16 بايت ، قيمة الإرجاع 0x90 - ناجحة ، أخرى - فشل}
اقرأ عدد وظيفة sam_v sdt_getsamidtostr (iPort: integer ؛ pcsamid: pbyte ؛ ilfopen: integer): integer ؛ stdcall ؛ external'sdtapi.dll '؛ {iport] [في] عدد صحيح ، راجع قيمة إرجاع SDT_Resetsam 0x90 - ناجحة ، أخرى - فشل}
ابدأ في البحث عن وظيفة البطاقة sdt_startfindidcard (iPort: integer ؛ pucmanainfo: pbyte ؛ ilfopen: integer): integer ؛ stdcall ؛ external'sdtapi.dll '؛ {iport [in] رقم إدارة رقاقة البطاقة ، 4 بايت ، ILFOPEN [في] انظر SDT_RESETSAM قيمة إرجاع القيمة 0x9F-CARD SEECT بنجاح ، فشل البحث عن بطاقة 0x80} SDT_SELECTIDCARD (IPOR: Integer ؛ Pucmanamsg: pbyte ؛ Ilfopen: integer): integer ؛ External'sdtapi.dll '؛ {iport [in] يشير إلى رقم المنفذ ، pucmanamsg [out] مؤشر غير موقّع ، الرقم التسلسلي للشهادة/البطاقة ، 8 بايت ، ilfopen [في] راجع قيمة sdt_resetsam قيمة 0x90-card ، 0x81- فشل اختيار البطاقة}
اقرأ رقم إدارة البطاقة وظيفة SDT_READMNGINFO (iPort: integer ؛ pucmanagemsg: pbyte ؛ ilfopen: integer): integer ؛ stdcall ؛ external'sdtapi.dll '؛ رقم الإدارة ، 28 بايت ، ilfopen [في] قيمة الإرجاع 0x90 - ناجحة ، أخرى - فشل القراءة}
قراءة شهادة/بطاقة معلومات ثابتة وظيفة sdt_readbasemsg (iport: integer ؛ pucchmsg: pbyte ؛ puichmsglen: pinteger ؛ pucphmsg: pbyte ؛ puiphmsglen: pinteger ؛ iLfopen: integer): stdcall ؛ يمثل رقم المنفذ ، يشير PUCCHMSG [OUT] إلى معلومات النص القراءة ، يشير Puichmsglen [Out] إلى معلومات نص القراءة ، يشير Pucphmsg [out] إلى معلومات الصورة القراءة ، ويشير Puiphmsglen [Out] إلى طول معلومات الصورة القراءة ، ilfopen [in] see sdt_resetsam value 0x90 - اقرأ المعلومات الثابتة بنجاح ، فشلت قراءة المعلومات الثابتة الأخرى}
اقرأ وظيفة معلومات إضافية sdt_readnewappmsg (iPort: integer ؛ pucappmsg: pbyte ؛ puiappmsglen: pinteger ؛ ilfopen: integer): integer ؛؛ stdcall ؛ external'sdtapi.dll '؛ تشير إلى معلومات إضافية ، يشير PuiaPppmsglen [Out] إلى طول المعلومات الإضافية للقراءة ، Ilfopen [in] see sdt_resetsam return value 0x90 - قراءة المعلومات الإضافية الناجحة ، والآخر - فشلت قراءة المعلومات الإضافية}}
وظيفة فك تشفير الصور getBMP (wlt_file: pCare ، intf: integer): integer ؛ stdcall ؛ external'wltrs.dll '؛ {wlt_file-wlt اسم ملف التواصل الجهاز (1-rs-232c ، 2-usb) قيمة الإرجاع: إنشاء *.bmp ومعلومات الإرجاع التالية: فك تشفير photo صحيح ، خطأ 0-استدعاء في استدعاء sdtapi.dll ، -1-photo هو خطأ ، -2-wlt face error ، -3-wlt خطأ في فتح الملف ، -خطأ تنسيق ملف 4 -WLT ، -5 من البرمجيات غير مصرح بها ، خطأ في الاتصال -6 جهاز}}
رمز المصدر:
وحدة idreader ؛ ، الرجاء استبدال البطاقة! '؛ TIP_ICREADER_READ_FAILED =' فشل قراءة البطاقة! '؛ TIP_ICREADER_CALL_DLL_FAILED =' Call خطأ استدعاء sdtapi.dll! '؛ TIP_ICREADER_PICTURE_DECODE_FAILED =' خطأ فك تشفير الصور! '؛ TIP_ICREADER_WLT_FILE_EXTEND_FAILED =' WLT FILE ERROR! '؛ TIP_ICREADER_WLT_FILE_OPEN_FAILED =' خطأ في فتح الملف! '؛ 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 ؛ الجنس: صفيف [0..0] من widechar ؛ الأمة: صفيف [0..1] من widechar ؛ عيد ميلاد: صفيف [0..7] من widechar ؛ addr: صفيف [0..34] من widechar ؛ idsn: صفيف [0..17] من widechar ؛ issueorgan: Array [0..14] من Widechar ؛ Vaildbegin: Array [0..7] من Widechar ؛ Vaildend: Array [0..7] من Widechar ؛ : integer integer idcard (iPortid: integer ؛ var puciin: integer ؛ : عدد صحيح) : integer stdcall ؛ اسم dll_sdtapi ' sdt_readbasemsgtofile ' : tstrings ؛ وظيفة ithnicnotoname (ano: string): string ؛ string ؛ beginResult: = lstethnic.values [ano] ؛ end ؛ function formatdatestest (avalue: string): string ؛ string ؛ Copy (Avalue ، 5 ، 2) + '-' + copy (avalue ، 7 ، 2) ؛ end ؛ function readicCard (var acardinfo: tidcardinfo ؛ var aerrmsg: string): boolean ؛ variport: integer ؛ intopenportrtn: integer ؛ butbport: Boolean ؛ edziportid: integer ؛ riet: integer ؛ puciin: integer ؛ edziifopen: integer ؛ pucsn: integer ؛ puichmsglen: integer ؛ puiphmsglen: integer ؛ // النتيجة: = false ؛ butbport: = false ؛ edziifopen: = 1 ؛ edziportid: = 0 ؛ puichmsglen: = 0 ؛ puiphmsglen: = 0 ؛ // اكتشاف اتصال الجهاز لمنفذ USB ، يجب عليك أولاً اكتشاف USBFor iPort: = 1001 إلى 1016 DOBEGININTOPENPORTRTN: = SDT_OPENPORT (IPORT) ؛ إذا كانت intopenportrtn = 144 thenbeginedziportid: = iPort ؛ butbport: = true ؛ end ؛ end ؛ 1 إلى 2 dobeginintopenportrtn: = sdt_openport (iPort) ؛ إذا intopenportrtn = 144 thenbeginedziportid: = iPort ؛ butbport: = false ؛ ind ؛ end ؛ end ؛ end ؛ end ؛ in intopenportrtn <> 144 ayrabin // application.messagebox aerrmsg: = error_icreader_open_port ؛ النتيجة: = false ؛ exit ؛ end ؛ // ابحث عن البطاقة riet: = sdt_startfindidcard (edziportid ، puciin ، edziifopen) ؛ if iret <> 159 thenbeginiret: = sdt_startfindidcard (edziportid ، ابحث عن بطاقة إذا كان iret <> 159 thenbeginsdt_closeport (edziportid) ؛ // application.messagebox (tip_icreader_no_card ، tip_title) ؛ aerrmsg: = tip_icreader_no_card ؛ النتيجة: = exit ؛ end ؛ end ؛ ، pucsn ، edziifopen) ؛ إذا كان iret <> 144 thenbeginiret: = sdt_selectidcard (edziportid ، pucsn ، edziifopen) ؛ if iret <> 144 tipeginsdt_closeport (edziportid) ؛ eader_read_failed ؛ نتيجة : = false ؛ exit ؛ end ؛ end ؛ // لاحظ أنه هنا ، يجب أن يكون المستخدم قد قرأ وكتابة الأذونات إلى الدليل الحالي للتطبيق إذا كانت ملفات fileexists ('wz.txt') ثم sysutils.deletefile ('wz.txt' )) 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 ؛ النتيجة: exit ؛ end ؛ // فيما يلي تحليل الصورة. الشركة المصنعة في الدليل الجذري للقرص C ، ستفشل دقة الصور إذا كان Busbport theniRet: = getBMP (pansichar (ansistring ('zp.wlt')) ، 2) elseiret: = getBmp (pansichar (ansistring ('Zp.wlt' ) ، 1) تمديد ، tip_title) ؛ النهاية ؛ -3: startapplication.messagebox (tip_icreader_wlt_file_open_failed ، tip_title) ؛ end ؛ -4: enterapplication. العنوان) ؛ نهاية ؛ -6 : beginapplication.messagebox (tip_icreader_device_failed ، tip_title) ؛ end ؛ sdt_closeport (edziportid) ؛ AcardInfo)) ؛ fs.free ؛ /// name: ansistring (idcardInfo.name) ؛ // الجنس: إذا كان Ansistring (idcardinfo.sex) = '1' ؛ // ithnic: ithnicnotoname (ansistring (idcardinfo.nation)) ؛ // سنة الميلاد شهر والتاريخ: formatdatestest (Ansistring (idcardinfo.birthday)) ؛ // رقم المعرف: معرف: = trim (Ansistring (idcardinfo.idsn)) ؛//شهادة إصدار الشهادة: المكان: = trim (Ansistring (idcardinfo.issueorgan)) idcardinfo.vaildbegin)) ؛ // نهاية تاريخ الرسوم إذا كان القطع (ansistring (idcardInfo.vaildend)) = 'long-lond' then // validdateend: = formatDateTime ('yyy-mm-dd' ، maxdatetim ValityDateend: = formatdatestr (ansistring (idcardInfo.Vaildend) ؛ // النتيجة: end ؛ end ؛ ' +' = ' +' mongol ') ؛ add ('03' + '=' + 'Hui People') ؛ add ('04 ' +' = ' +' Tibetan People ') ؛ add ('05' + ' = ' +' uyghur people ') ؛ add ('06' + '=' + 'miao people') ؛ add ('07 ' +' = ' +' yi people ') ؛ add ('08' + '=' + 'Zhuang People') ؛ add ('09 ' +' = ' +' buyi people ') ؛ add (' 10 ' +' = ' +' or or ") ؛ إضافة ('11 ' +' = ' +' manchu ") إضافة ('15 ' +' = ' +' Tujia people ') ؛ add ('16' + '=' + 'Hani People') ؛ add ('17 ' +' = ' +' kazakhs ') ؛ add (' 18 ' +' = ' +' dai people ') ؛ add ('19' + '=' + 'li people') ؛ add ('20 ' +' = ' +' lisu people ') ؛ add ('21' + '=' + 'wa people') ؛ add ('22 ' +' = ' +' she people ') ؛ add (' 23 ' +' = ' +' High Mountain Tribe ') ؛ add ('24' + '=' + 'lahu tribe') ؛ add ('25 ' +' = ' +' Aqua Tribe ') ؛ add ('26' + '=' + 'Dongxiang People') ؛ add ('27 ' +' = " + 'naxi people') ؛ add ('28 ' +' = ' +' jingpo people ') ؛ add ('29' + '=' + 'kirgiz') ؛ add ('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 ribe') ؛ add ('41 ' +' = ' +' Tajik Tribe ') ؛ add ('42' + '=' + 'nur tribe') ؛ add ('43 ' +' = " + 'Uzbek Tribe') ؛ add ('44 ' +' = ' +' Russian Tribe ') ؛ add (' 45 ' +' = ' +' ewenki ') ؛ add ('46' + '=' + ' de'ang ') ؛ add ('47' + '=' + 'Baoan') ؛ add ('48 ' +' = ' +' yugu ribe ') ؛ add ('49' + '=' + 'Jing Tribe ") add ('53 ' +' = ' +' hezhe clan ') ؛ add ('54' + '=' + 'menba') ؛ add ('55 ' +' = ' +' luba ') ؛ add (' 56 ' +' = ' +' kino ') ؛ add ('57' + '=' + 'others') ؛ add ('98 ' +' = ' +' trantrating foreign ') ؛ end ؛ finizationLsteThnic.free ؛ end ؛ end ./pplease إعداد sdtapi.dll wltrs.dll wltrs.lic مقدما ، وضعت في نفس الدليل