以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  怎样定义api函数  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=7184)

--  作者:sophia
--  发布时间:2010/5/23 8:00:00
--  怎样定义api函数

现用第三方dll文件,其中定义函数原型如下:

 

原  型:

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

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

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

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

       int _stdcall GetPeopleAddress(char *strTmp, int strLen)     //得到地址信息    

       int _stdcall GetPeopleIDCode(char *strTmp, int strLen)     //得到卡号信息    

       int _stdcall GetDepartment(char *strTmp, int strLen)      //得到发证机关信息    

       int _stdcall GetStartDate(char *strTmp, int strLen)         //得到有效开始日期    

       int _stdcall GetEndDate(char *strTmp, int strLen)              //得到有效截止日期

说    明:以上函数调用流程为:调用 CVR_Read_Content 或者 CVR_ReadBaseMsg 函数       

           成功后再分别调用以上函数。CVR_Read_Content 或者 CVR_ReadBaseMsg 函数  

 

返 回 值:

返回值

意义

1

正确

0

错误

  

在狐表中怎样定义API函数?例如:我想用第一个“得到姓名信息”的函数


--  作者:狐狸爸爸
--  发布时间:2010/5/23 11:06:00
--  

最好让发布商提供调用例程,我很少使用传统的DLL,有的话也是对方提供了例程给我的。

 

下面这段加入全局代码:

 

    <DllImport("文件名.dll")> _
    Private Function GetPeopleName(ByVal lpOutBuffer As StringBuilder, ByVal length As Integer) As Integer
    End Function

 

 Public Function GetName() As String 
        Dim lpOutBuffer As New StringBuilder(32)
        If GetPeopleName(lpOutBuffer, 32) = 1 Then
            Return lpOutBuffer.ToString.Trim
        Else
            Return Nothing
        End If
End Function

 

在Foxtable中用GetName函数取得姓名

 

 

 

[此贴子已经被作者于2010-5-23 11:07:12编辑过]

--  作者:lxl
--  发布时间:2010/5/23 11:25:00
--  

还要先调用CVR_Read_Content 才行

你还得把CVR_Read_Content 的函数原型贴出来。(也可能没有参数)

 

 


--  作者:sophia
--  发布时间:2010/5/24 0:39:00
--  

我把说明全都上传过来了,请帮参考下


--  作者:sophia
--  发布时间:2010/5/24 0:41:00
--  
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:身份证阅读器sdk使用手册.rar


--  作者:狐狸爸爸
--  发布时间:2010/5/24 8:26:00
--  

不太懂,对方应该有vb.net或C#例程的。

如果是vb.net的,可以直接用。

如果是C#的,网上有转换程序。

 

[此贴子已经被作者于2010-5-24 8:27:05编辑过]

--  作者:lxl
--  发布时间:2010/5/24 11:04:00
--  

大致是这样的:

先定义一个连接设备的函数InitComm

    Private Declare Function CVR_InitComm Lib "termb.dll" (ByVal Port As Integer) As Integer

    Public  Function InitComm() As Boolean   \'遍历串口,端口查找设备。找到返回True
        For i As Integer = 1 To 4
            If CVR_InitComm(i) = 1 Then Return True
        Next
        For i As Integer = 1001 To 1004
            If CVR_InitComm(i) = 1 Then Return True
        Next
        Return False
    End Function

 

以后用InitComm就可以启动设备了。

InitComm 如果成功(返回True)。可以进行下一步

 

 

 

[此贴子已经被作者于2010-5-24 11:07:46编辑过]

--  作者:lxl
--  发布时间:2010/5/24 11:12:00
--  

然后用定时器300ms自动检查一次是不是有身份证,或者手动用按钮来主动检测。

刷卡次数很少的话,就用手动检测吧,节约资源

    Private Declare Function CVR_Authenticate Lib "termb.dll" () As Integer

    Public Function Authenticate() As Boolean
        Return CVR_Authenticate = 1
    End Function

 

如果Authenticate函数为true就该执行下一步:读取信息


--  作者:sophia
--  发布时间:2010/5/24 11:23:00
--  

发布商提供的例程

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:vb.rar


--  作者:lxl
--  发布时间:2010/5/24 11:34:00
--  

这里没弄明白,也没办法调试。

 

 

    Private Declare Function CVR_ReadBaseMsg Lib "termb.dll" (ByVal pucCHMsg() As Byte, ByVal puiCHMsgLen As Integer, _
                                                      ByVal pucPHMsg() As Byte, ByVal puiPHMsgLen As Integer, _
                                                      ByVal nMode As Integer) As Integer                 \'读信息到内存
    Private Declare Function GetPeopleName Lib "termb.dll" (ByVal strTmp() As Byte, ByVal strLen As Integer) As Integer     \'读姓名

 

 

   Public Function GetName() As String
        Dim CHMsg() As Byte
        Dim CHMsfLen As Integer
        Dim PHMsg() As Byte
        Dim PHMsgLen As Integer
        Dim NameBuff() As Byte
        Dim Name As String
        CVR_ReadBaseMsg(CHMsg, CHMsfLen, PHMsg, PHMsgLen, 2)     \'主要是这里不明白。传入的参数怎么没用到
        GetPeopleName(NameBuff, 30)                                               
        Name = System.Text.Encoding.GetEncoding("GB2312").GetString(NameBuff)
        Return Name

    End Function