问题:现在我提供一个ICdm.dll函数的内容,请做过考勤系统的朋友帮忙看看,我想自已调用这些函数去设置IC卡的卡号和工号是同一个号的.比如说我有一个数据表P_PersonDetail,里面记录了内容为:
P_PersonDetail表的字段及内容如下:P_PersonID为工号,P_PersonName姓名,P_careNo为卡号
P_PersonID,P_PersonName,P_careNo
001502        小明
001503        小李
001504        小王
我要设置小明的卡号,怎样去设置呢,以下是调用icdm.dll文件函数是用VB写的,这是一个考勤供应商提供与考勤机取数据的函数,我这里有一个例子,是调用这个icdm.dll里的函数去读取每一个考勤机的记录,生成记事本的形式保存下来.

解决方案 »

  1.   

    Option Explicit
    '//命令字
    Public Const gconSetTime = 1                        '// 广播校时
    Public Const gconSetDMAddress = 2            '// 取考勤门禁记录序号
    Public Const gconSearchDMOnline = 3                 '// 单机寻机
    Public Const gconSearchOnline = 4                   '//联机寻机
    Public Const gconRecvRecord = 16              '// 取考勤门禁记录
    Public Const gconRecvRecIndex = 17            '// 取考勤门禁记录序号
    Public Const gconSetDMProperty = 18                 '// 设置机具属性
    Public Const gconRecvDMStatus = 22                  '//取机具状态
    Public Const gconDelRecvAttRecord = 28              ''//删除方式取考勤门禁记录
    Public Const gconRecvDelRecordRlt = 29              ''//删除方式取考勤门禁记录确认删除
    '/////////////////////////////////////////////////////////////////////////
    '//返回信息代码
    Public Const gconSendSuccess = 0                           '//发送成功(成功,广播命令)
    Public Const gconCommError = 1                             '//通讯错误
    Public Const gconTagAdrError = 2                           '//目标地址错误
    Public Const gconSourAdrError = 3                          '//源地址错误
    Public Const gconCheckError = 4                            '//校验错误
    Public Const gconOverTime = 5                              '//超时错误
    Public Const gconNotRecvFrm = 6                            '//未收到返回帧
    Public Const gconRecvFrm = 7                               '//收到返回帧
    Public Const gconSuccess = 8                               '//命令执行成功(成功)
    Public Const gconFail = 9                                  '//命令执行失败
    Public Const gconNotSend = 10                              '//未发送错误
    Public Const gconCmdError = 11                             '//返回命令字错误
    Public Const gconDataError = 12                            '//返回数据错误
    Public Const gconRecvSuccess = 13                          '//成功取信息(成功,取信息)
    Public Const gconFormatError = 14                          '//格式错误
    Public Const gconInitCardKey = 101                         '//销卡'//取记录序号发送结构
    Public Type typeSendRecIndex ''SENDRECINDEX
        bLinerSearch As Long
        nBeginYear  As Long
        nBeginMonth As Long
        nBeginDay   As Long
        nEndYear    As Long
        nEndMonth   As Long
        nEndDay     As Long
    End Type
    '//销卡
    Public Type typeInitCardKey   ''InitCARDKEY
        nSectorNum As Long
        strOldKeyA As String * 16
        strOldKeyB As String * 16
    End Type'//取记录序号接收结构
    Public Type typeRecvrecIndex    ''RECVRECINDEX
        nBeginIndex As Long
        nEndIndex   As Long
    End Type
    '//取考勤门禁记录结构
    Public Type typeRecvattGuardRec  ''RECVATTGUARDREC
        nRecIndex  As Long
        nRecCount  As Long
    End Type'//考勤门禁系统刷卡记录结构
    Public Type typeAttendRecord     ''ATTENDRECORD
        nPersonID  As String * 7
        nYear      As Long
        nMonth     As Long
        nDay       As Long
        nHour      As Long
        nMinute    As Long
        nSecond    As Long
        bOnDuty    As Boolean
        bBC        As Long
        nAddress   As Long
    End Type'//取机具状态结构
    Public Type typeRecvStatus      ''RECVSTATUS
        nYear As Long
        nMonth As Long
        nDay As Long
        nWeek As Long
        nHour As Long
        nMinute As Long
        nSecond As Long
        nRecordCount As Long
    End Type
    '//取刷卡记录结构
    Public Type typeRecvattendRecord  ''RECVATTENDRECORD
        Record(1 To 256) As typeAttendRecord
    End Type'//联机寻址
    Public Type typeSearchDMonLine
        nCount As Long
        nDMAadr(1 To 256) As Long
    End Type'//联机设置地址
    Public Type typeSetDMAddress
         unSerialNum As Long
         nAddress As Long
    End Type'//本地设置地址
    Public Type typeSetDMProperty
        nIndex      As Long
        nProperty   As Long
    End Type
    '//考勤门禁卡存储信息结构
    Public Type typeCardInfoAttend   ''CARDINFO_ATTEND
        nFileSort       As Long
        nCardID         As Long
        nPersonID       As String * 7
        nGradeID        As Long
        nAttGroup       As Long
        strUserKey      As String * 4
        strName         As String * 8
        nLimitYear      As Long
        nLimitMonth     As Long
        nLimitDay    As Long
    End Type'//下载LCD显示题头结构
    Public Type typeLCDTitle         ''LCDTITLE
        strTitle1 As String * 16
        strTitle2 As String * 16
        strTitle3 As String * 16
    End Type'//收费机消费卡发卡数据结构
    Public Type typeCardInfo_Pos
         nFileSort       As Long
         nCardID         As Long
         nInfoID         As Long
         nstrName        As String * 8
         nStrUserKey     As String * 4
         nLimitYear      As Long
         nLimitMonth     As Long
         nLimitDay       As Long
         nMoneyCent      As Long
    End Type
      

  2.   

    '/////////////////////////////////////////////////////////////////////////
    '//调用动态库函数声明
    Declare Function OpenDevice Lib "ICDM.dll" _
                               (ByVal nMyAddress As Long, _
                                ByVal hwnd As Long) As Long
    Declare Sub RecvEdition Lib "ICDM.dll" _
                               (ByVal lpRecvData As String)
    Declare Function ConnectPort Lib "ICDM.dll" _
                               (ByVal pDevice As Long, _
                                ByVal lpCommDef As String) As Boolean
    Declare Sub SetAddLog Lib "ICDM.dll" _
                               (ByVal pDevice As Long, _
                                ByVal bAddLog As Long)
    Declare Sub SetInnerCode Lib "ICDM.dll" _
                               (ByVal pDevice As Long, ByVal bBig5 As Long)
    Declare Function StartICDMCommand Lib "ICDM.dll" _
                               (ByVal pDevice As Long, _
                                ByVal nAddress As Long, _
                                ByVal ICDMCmd As Long, _
                                ByRef pParameters As Any, _
                                ByVal nSizeOfParameter As Long) As Long
    Declare Function GetSizeOfData Lib "ICDM.dll" _
                               (ByVal pCommand As Long) As Long
    Declare Function GetData Lib "ICDM.dll" _
                               (ByVal pCommand As Long, _
                                ByRef pDataBuffer As Any, _
                                ByVal nSize As Long) As Boolean
    Declare Function GetCmdResult Lib "ICDM.dll" _
                               (ByVal pCommand As Long) As Long
    Declare Sub EndICDMCommand Lib "ICDM.dll" _
                               (ByVal pCommand As Long)
    Declare Function DisConnectPort Lib "ICDM.dll" _
                               (ByVal pDevice As Long) As Boolean
    Declare Sub CloseDevice Lib "ICDM.dll" _
                               (ByVal pDevice As Long)
    Declare Sub SetCommKey Lib "ICDM.dll" _
                               (ByVal pDevice As Long, _
                                IpCommKey As String)
    Declare Sub SetWaitTime Lib "ICDM.dll" _
                               (ByVal pDevice As Long, _
                                ByVal nTime As Long)
    ''''**********************  数据库方面  *********************************
    Public gConn As New ADODB.Connection                ''数据库连接对象
    Public gstrServer As String                         ''服务器名称
    Public gstrDataBase As String                       ''数据库名称
    Public gstrDBUserID As String                       ''连接数据库的用户名
    Public gstrDBPassWord As String                     ''连接数据库的密码''''**********************  API *****************************************Public Declare Function GetPrivateProfileString Lib _
                            "kernel32" Alias "GetPrivateProfileStringA" _
                            (ByVal lpApplicationName As String, _
                            ByVal lpKeyName As Any, _
                            ByVal lpDefault As String, _
                            ByVal lpReturnedString As String, _
                            ByVal nSize As Long, _
                            ByVal lpFileName As String) As Long
    Public Declare Function WritePrivateProfileString Lib _
                            "kernel32" Alias "WritePrivateProfileStringA" _
                            (ByVal lpApplicationName As String, _
                            ByVal lpKeyName As Any, _
                            ByVal lpString As Any, _
                            ByVal lpFileName As String) As Long''''**********************程序方面    ***********************************
    Public Const gconSuccessResult = "!!OK"            ''返回正确字符串
    Public Const gconErrorResult = "!!CANCEL"          ''返回错误字符串
    Public gstrDataFilePath As String                  ''数据文件存放路径
    Public gstrReadFileResult() As String              ''读取文件返回值的传值数组
    Public gstrDataFile As String                      ''数据文件名称
    上面有些函数我不知道该怎么去用,请懂得这方面的朋友帮忙分析一下,我只要设置卡号就行了,怎样调用上面的函数设定卡号就行了.请帮帮忙.谢了
      

  3.   

    OK,太长了,没有办法一步一步帮你做翻译了,我就给你一个结构和函数的DELPHI定义吧,你可以自己将他们全部转换为自己的DELPHI代码;让后用起来的时候就方便了:=========VB================
    Public Type typeSearchDMonLine
        nCount As Long
        nDMAadr(1 To 256) As Long
    End Type=======Delphi============
    type typeSearchDMonLine=packed record
        nCount:integer;
        nDMAdr: array [1..256] of integer;
    end;
    ========VB================
    Declare Function StartICDMCommand Lib "ICDM.dll" _
                               (ByVal pDevice As Long, _
                                ByVal nAddress As Long, _
                                ByVal ICDMCmd As Long, _
                                ByRef pParameters As Any, _
                                ByVal nSizeOfParameter As Long) As Long
    =========Delphi===========
    Function StartICDMCommand(pDevice:integer;nAddress:integer;ICDMCmd:integer;pParameters:pointer;nSizeOfParameter:integer):integer;stdcall;external 'ICDM.dll';
    如果你要更加的OO话,你就需要再对这些DLL内的函数进行新的面向对象的封装,然后放在一个单独的类里面。
      

  4.   

    你只贴出了VB代码的一些声明,根本没有它读取信息的代码。需要贴出它读IC卡号的代码大家才能帮你
      

  5.   

    呵呵,终于解决了~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    就上面函数!
    '//考勤门禁卡存储信息结构
    Public Type typeCardInfoAttend   ''CARDINFO_ATTEND
        nFileSort       As Long
        nCardID         As Long
        nPersonID       As String * 7
        nGradeID        As Long
        nAttGroup       As Long
        strUserKey      As String * 4
        strName         As String * 8
        nLimitYear      As Long
        nLimitMonth     As Long
        nLimitDay    As Long
    End Type发送函数为
    Declare Function StartICDMCommand Lib "ICDM.dll" _
                               (ByVal pDevice As Long, _
                                ByVal nAddress As Long, _
                                ByVal ICDMCmd As Long, _
                                ByRef pParameters As Any, _
                                ByVal nSizeOfParameter As Long) As Long
    发卡问题搞定!!!!
    还得多谢hotyten说的DELPHI方法使用!谢了