果然如此,又学到了。以前只知道是ptr*是直接到地址取值。原来*是引用。
那么上面的函数又可以精简了。
#NoTrayIcon
#RequireAdmin
#pre_usex64=n
#include <array.au3>
Local $array = ReadIDCardComm()
ConsoleWrite(@error & @CRLF)
_ArrayDisplay($array, @error)
Func ReadIDCardComm($iPort = 1001, $nTimeOut = 10000)
Local $aRet = DllCall("IdReaderApiComm.dll", _
'int', 'ReadIDCardComm', _
'int', $iPort, _
'wstr', '', 'int*', '', _
'wstr', '', 'int*', '', _
'wstr', '', 'int*', '', _
'wstr', '', 'int*', '', _
'wstr', '', 'int*', '', _
'wstr', '', 'int*', '', _
'wstr', '', 'int*', '', _
'wstr', '', 'int*', '', _
'wstr', '', 'int*', '', _
'wstr', '', 'int*', '', _
'int', $nTimeOut)
If Not @error Then Return $aRet
Return SetError(@error, 0, 0)
EndFunc ;==>ReadIDCardComm 回复 16# haijie1223
代码可以运行了,但读取出来全是乱码。
暂时使用控件对象可以正确读取了。#PRE_UseX64=n
$IdCard = ObjCreate("IDCARDREADER.IdCardReaderCtrl.1")
$IdCard.SetTimeout(5000); //设置读取超时时间
$IdCard.SetPort(1001); //设置 com 口号或 usb 后号
$IdCard.SetPicPath(@ScriptDir & "\ZP.bmp")
$iRet=$IdCard.ReadIDCard(); //开始读取
If $iRet<>0 Then
MsgBox(0,0,$IdCard.GetErrMsg())
Else
Local $Name=$IdCard.GetName(); //姓名
Local $Nation=$IdCard.GetNation(); //民族
Local $Address=$IdCard.GetAddress()
Local $IDNo=$IdCard.GetIDNo()
Local $Sex=$IdCard.GetSex()
Local $Birthday=$IdCard.GetBirthday()
MsgBox(0,"身份证信息", $Name & @CRLF & $Nation & @CRLF & $Address & @CRLF & $IDNo & @CRLF & $Sex & @CRLF & $Birthday)
EndIf
页:
1
[2]