以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- [求助]关于身份证阅读器的全局代码声明和调用 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=81246) |
-- 作者:林小闲 -- 发布时间: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)
返回 0 - 0
|
-- 作者:大红袍 -- 发布时间:2016/2/22 18:12:00 -- 叫厂家给你提供一个 vb.net 或者 c#.net 的范例。
如果是vb.net的,直接拷贝里面的代码到foxtable就可以用了。 |
-- 作者:大红袍 -- 发布时间:2016/2/22 18:16:00 -- 或者看看,是不是类似这个帖子。
http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=13402&authorid=0&page=0&star=1
|
-- 作者:林小闲 -- 发布时间: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对象需要预分配存储空间 |
-- 作者:大红袍 -- 发布时间: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 |
-- 作者:大红袍 -- 发布时间:2016/2/24 9:16:00 -- StringBuilder 参考
http://www.foxtable.com/help/topics/2097.htm
|
-- 作者:林小闲 -- 发布时间: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 \'得到姓名信息
Dim ls_id1 As String
i = GetPeopleName(ls_name_sb, j) |
-- 作者:大红袍 -- 发布时间: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 \'得到地址信息 |
-- 作者:林小闲 -- 发布时间: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 \'连接设备
Dim Info As String \'Info = FileSys.ReadAllText(ApplicationPath & "wz.txt", Encoding.Default) \'读取生成的文本文件 i = GetPeopleIDCode(ls_id1_sb, j) messagebox.show(ls_name & i ) \'i = Tables("人员信息").Rows.count \'For j = 0 To i - 1
|
-- 作者:林小闲 -- 发布时间:2016/2/24 10:51:00 -- 感谢大红袍版主。 这个平台刚接触,很多语法结构都不清楚,全面的学习来不及了,只能用到哪里学到哪里。 给各位大师添麻烦了。 |