Foxtable(狐表)用户栏目专家坐堂 → [求助]关于身份证阅读器的全局代码声明和调用


  共有2538人关注过本帖树形打印复制链接

主题:[求助]关于身份证阅读器的全局代码声明和调用

帅哥哟,离线,有人找我吗?
林小闲
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:9 积分:116 威望:0 精华:0 注册:2016/2/19 13:49:00
[求助]关于身份证阅读器的全局代码声明和调用  发帖心情 Post By:2016/2/22 17:01:00 [只看该作者]

各位大师,有个问题请教各位。

 

关于身份证阅读器,厂家提供的API跟范例的不太一样,不是通过wz.txt来存储身份证信息,而是通过其他的API函数来提取。

如:

 

int  GetPeopleName(char *strTmp, int *strLen)                                 得到姓名信息      

int  GetPeopleSex(char *strTmp, int *strLen)                                    得到性别信息      

int  GetPeopleNation(char *strTmp, int *strLen)                                得到民族信息      

int  GetPeopleBirthday(char *strTmp, int *strLen)                        得到出生日期

......

 

参数: 

       *strTmp   返回的信息缓存指针。

       *strLen    返回的信息长度指针。

 

想这样的API函数我该如何声明和调用?翻帮助手册没有查到,尝试了几次都报错。

请大师帮助!谢谢!

 

这是我尝试的声明和调用,报错了。

Public Declare Function GetPeopleName Lib "termb.dll" Alias "GetPeopleName" (ByVal strTmp As String, ByVal strLen As Integer) As Integer '得到姓名信息

 

Dim ls_Name As String

Dim i As Integer

Dim j As Integer

 

i = GetPeopleName(ls_name,j)
messagebox.show(i & " - " & j)

 

返回 0 - 0

 


 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/2/22 18:12:00 [只看该作者]

 叫厂家给你提供一个 vb.net 或者 c#.net 的范例。

 

 如果是vb.net的,直接拷贝里面的代码到foxtable就可以用了。


 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/2/22 18:16:00 [只看该作者]


 回到顶部
帅哥哟,离线,有人找我吗?
林小闲
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:9 积分:116 威望:0 精华:0 注册:2016/2/19 13:49:00
  发帖心情 Post By:2016/2/24 9:03:00 [只看该作者]

厂家只给了这个,不清楚该怎么预分配存储空间,全局代码也提示不允许用DllImport

----------------------------

如果是VB.net,这样声明
<DllImport("termb.dll", EntryPoint:="GetPeopleName", _
        CallingConvention:=CallingConvention.StdCall, CharSet:=CharSet.Ansi)> _
    Public Shared Function GetPeopleName(ByVal strTmp As StringBuilder, ByRef strLen As Integer) As Integer

调用该函数之前StringBuilder对象需要预分配存储空间


 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/2/24 9:16:00 [只看该作者]

 <DllImport("termb.dll", EntryPoint:="GetPeopleName", _
CallingConvention:=CallingConvention.StdCall, CharSet:=CharSet.Ansi)> _
Public Function GetPeopleName(ByVal strTmp As StringBuilder, ByRef strLen As Integer) As Integer
End Function

 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/2/24 9:16:00 [只看该作者]


 回到顶部
帅哥哟,离线,有人找我吗?
林小闲
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:9 积分:116 威望:0 精华:0 注册:2016/2/19 13:49:00
  发帖心情 Post By:2016/2/24 10:00:00 [只看该作者]

目前已经能取出性别、民族、出生日期、身份证号,就是住址和姓名取不到,不知道为什么。

Public Declare Function GetPeopleName Lib "termb.dll" Alias "GetPeopleName" (ByVal strTmp As StringBuilder, ByRef strLen As Integer) As Integer '得到姓名信息
Public Declare Function GetPeopleSex Lib "termb.dll" Alias "GetPeopleSex" (ByVal strTmp As StringBuilder, ByRef strLen As Integer) As Integer '得到性别信息
Public Declare Function GetPeopleNation Lib "termb.dll" Alias "GetPeopleNation" (ByVal strTmp As StringBuilder, ByRef strLen As Integer) As Integer '得到民族信息
Public Declare Function GetPeopleBirthday Lib "termb.dll" Alias "GetPeopleBirthday" (ByVal strTmp As StringBuilder, ByRef strLen As Integer) As Integer '得到出生日期
Public Declare Function GetPeopleAddress Lib "termb.dll" Alias "GetPeopleAddress" (ByVal strTmp As StringBuilder, ByRef strLen As Integer) As Integer '得到地址信息
Public Declare Function GetPeopleIDCode Lib "termb.dll" Alias "GetPeopleIDCode" (ByVal strTmp As StringBuilder, ByRef strLen As Integer) As Integer '得到身份证号信息

 

Dim ls_id1 As String
Dim ls_id1_sb As New StringBuilder(18)
Dim ls_name As String
Dim ls_name_sb As New StringBuilder(30)
Dim ls_sex As String
Dim ls_sex_sb As New StringBuilder(30)
Dim ls_nation As String
Dim ls_nation_sb As New StringBuilder(30)
Dim ls_birthday As String
Dim ls_birthday_sb As New StringBuilder(30)
Dim ls_address As String
Dim ls_address_sb As New StringBuilder(30)

 

i = GetPeopleName(ls_name_sb, j)
ls_name = ls_name_sb.Tostring
i = GetPeopleSex(ls_sex_sb, j)
ls_sex = ls_sex_sb.Tostring
i = GetPeopleNation(ls_nation_sb, j)
ls_nation = ls_nation_sb.Tostring
i = GetPeopleBirthday(ls_birthday_sb, j)
ls_birthday = ls_birthday_sb.Tostring
'i = GetPeopleAddress(ls_address_sb, j)
'ls_address = ls_address_sb.Tostring
i = GetPeopleIDCode(ls_id1_sb, j)
ls_id1 = ls_id1_sb.Tostring


 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/2/24 10:08:00 [只看该作者]

改成这样看看,如果确实提取不到,问一下厂家客服。

 

Public Declare Function GetPeopleAddress Lib "termb.dll" Alias "GetPeopleAddress" (ByRef strTmp As StringBuilder, ByRef strLen As Integer) As Integer '得到地址信息


 回到顶部
帅哥哟,离线,有人找我吗?
林小闲
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:9 积分:116 威望:0 精华:0 注册:2016/2/19 13:49:00
  发帖心情 Post By:2016/2/24 10:19:00 [只看该作者]

可以了,长度调整到80,可以取到了。

厂家的人就给了3个dll,这些代码都是网上查的,这几天排列组合测试至少500次。

以下是完整的声明和调用语句,注释的语句请无视,还得继续呢。

 

Public Declare Function CVR_InitComm Lib "termb.dll" Alias "CVR_InitComm" (ByVal Port As Integer) As Integer '连接设备
Public Declare Function CVR_Authenticate Lib "termb.dll" Alias "CVR_Authenticate" () As Integer '验证身份证
Public Declare Function CVR_Read_Content Lib "termb.dll" Alias "CVR_Read_Content" (ByVal Active As Integer) As Integer '读取身份证信息
Public Declare Function CVR_CloseComm Lib "termb.dll" Alias "CVR_CloseComm" () As Integer '关闭设备


Public Declare Function GetPeopleName Lib "termb.dll" Alias "GetPeopleName" (ByVal strTmp As StringBuilder, ByRef strLen As Integer) As Integer '得到姓名信息
Public Declare Function GetPeopleSex Lib "termb.dll" Alias "GetPeopleSex" (ByVal strTmp As StringBuilder, ByRef strLen As Integer) As Integer '得到性别信息
Public Declare Function GetPeopleNation Lib "termb.dll" Alias "GetPeopleNation" (ByVal strTmp As StringBuilder, ByRef strLen As Integer) As Integer '得到民族信息
Public Declare Function GetPeopleBirthday Lib "termb.dll" Alias "GetPeopleBirthday" (ByVal strTmp As StringBuilder, ByRef strLen As Integer) As Integer '得到出生日期
Public Declare Function GetPeopleAddress Lib "termb.dll" Alias "GetPeopleAddress" (ByVal strTmp As StringBuilder, ByRef strLen As Integer) As Integer '得到地址信息
Public Declare Function GetPeopleIDCode Lib "termb.dll" Alias "GetPeopleIDCode" (ByVal strTmp As StringBuilder, ByRef strLen As Integer) As Integer '得到身份证号信息

 

 

Dim Info As String
Dim ls_id1 As String
Dim ls_id1_sb As New StringBuilder(30)
Dim ls_id2 As String
Dim ls_name As String
Dim ls_name_sb As New StringBuilder(80)
Dim ls_sex As String
Dim ls_sex_sb As New StringBuilder(30)
Dim ls_nation As String
Dim ls_nation_sb As New StringBuilder(30)
Dim ls_birthday As String
Dim ls_birthday_sb As New StringBuilder(30)
Dim ls_address As String
Dim ls_address_sb As New StringBuilder(80)
Dim i As Integer
Dim j As Integer = 30

'Info = FileSys.ReadAllText(ApplicationPath & "wz.txt", Encoding.Default) '读取生成的文本文件
'info = info.Replace(vbcrlf,vblf) '将回车换行替换为换行
'Dim pars() As String = Info.Split(vblf) '将读取的信息拆分为数组

i = GetPeopleIDCode(ls_id1_sb, j)
ls_id1 = ls_id1_sb.Tostring
i = GetPeopleName(ls_name_sb, 80)
ls_name = ls_name_sb.Tostring
i = GetPeopleSex(ls_sex_sb, j)
ls_sex = ls_sex_sb.Tostring
i = GetPeopleNation(ls_nation_sb, j)
ls_nation = ls_nation_sb.Tostring
i = GetPeopleBirthday(ls_birthday_sb, j)
ls_birthday = ls_birthday_sb.Tostring
i = GetPeopleAddress(ls_address_sb, 80)
ls_address = ls_address_sb.Tostring

messagebox.show(ls_name & i )

'i = Tables("人员信息").Rows.count

'For j = 0 To i - 1
    'ls_id2 = Tables("人员信息")(j,"身份证号")
    'If ls_id2 = ls_id1 Then
        'MessageBox.Show("此面试人员信息已存在:" & ls_name & "|" & ls_id1,"提示")
    'Else
        Dim r As Row = Tables("人员信息").AddNew
        r("姓名") = ls_name
        r("性别") = ls_sex
        r("民族") = ls_nation
        r("出生日期") = ls_Birthday
        ''r("出生日期") = pars(3).replace("年","-").Replace("月","-").Replace("日","")
        r("住址") = ls_address
        r("身份证号") = ls_id1
        ''r("发证机关") = pars(6)
        ''r("签发日期") = pars(7).SubString(0,10).Replace(".","-")
        ''r("有效日期") = pars(7).SubString(11).Replace(",","-")
        r("面试日期") = Today
        FileSys.CopyFile(ApplicationPath & "zp.bmp", ProjectPath & "\Attachments\" & r("身份证号") & ".bmp",True) '照片复制到Attachments目录
        r("照片") = r("身份证号") & ".bmp"
    'End If
'Next

 


 回到顶部
帅哥哟,离线,有人找我吗?
林小闲
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:9 积分:116 威望:0 精华:0 注册:2016/2/19 13:49:00
  发帖心情 Post By:2016/2/24 10:51:00 [只看该作者]

感谢大红袍版主。

这个平台刚接触,很多语法结构都不清楚,全面的学习来不及了,只能用到哪里学到哪里。

给各位大师添麻烦了。


 回到顶部