2014-09-29 2 views
0

내 프로젝트에 문제가 있습니다. 이미 지문 인식 장치에 로그 데이터가 있습니다. 하지만 사용자 정보를 내 vb.net 응용 프로그램에서 사용자 정보를 얻으려고하면 다음과 같은 오류 메시지가 나타납니다.VB.NET을 사용하여 Zkemkeeper에서 지문 X100-C로 사용자 정보를 얻는 방법

보호 된 메모리를 읽거나 쓰려고 시도했습니다. 다른 메모리가 손상되었다는 표시 인 경우가 종종 입니다. 내가 수리 그것을 위해 무엇을해야

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click 
    Dim UserID As String 
    Dim Passwd As String 
    Dim Privilege2 As Integer 

    Dim dwEnrollNumber As String 

    Dim lvItem As New ListViewItem("Items", 0) 

    Dim i As Integer = 0 

    With ListView3 
     .View = View.Details 
     .GridLines = True 
     .Columns.Add("No.", 100) 
     .Columns.Add("Enroll", 100) 
     .Columns.Add("User Name", 100) 
     .Columns.Add("Password", 100) 
     .Columns.Add("Privilege", 100) 
     .Columns.Add("Privilege", 100) 
    End With 

    ListView3.Items.Clear() 
    If zkem.ReadAllUserID(1) Then 
     While zkem.SSR_GetUserInfo(1, dwEnrollNumber, UserID, Passwd, Privilege2, Enabled) 
      i += 1 

      lvItem = ListView3.Items.Add(i.ToString()) 
      lvItem.SubItems.Add(dwEnrollNumber) 
      lvItem.SubItems.Add(UserID) 
      lvItem.SubItems.Add(Passwd) 
      lvItem.SubItems.Add(Privilege2) 
      lvItem.SubItems.Add(Privilege2) 

      Application.DoEvents() 
     End While 
    End If 
End Sub 

:

는 그리고 이것은 GET 사용자 정보에 대한 내 코드입니다.

나는 Zkemkeeper SDK를 사용하고 있습니다.

그리고 미안 내 영어

+0

누군가가 나를 도울 수 하시나요? –

답변

-1
'********************************************************** 
'* Programa para descarga de logs de acceso ZKSoftware 
'********************************************************** 

Public Class AttLogs 

    'Create Standalone SDK class dynamicly. 
    Public axCZKEM1 As New zkemkeeper.CZKEM 

    '********************************************************************************************************************************************* 
    '* Before you refer to this demo,we strongly suggest you read the development manual deeply first.           * 
    '* This part is for demonstrating the communication with your device.There are 3 communication ways: "TCP/IP","Serial Port" and "USB Client".* 
    '* The communication way which you can use duing to the model of the device.                 * 
    '* ******************************************************************************************************************************************* 
#Region "Communication" 
    Private bIsConnected = False 'the boolean value identifies whether the device is connected 
    Private iMachineNumber As Integer 'the serial number of the device.After connecting the device ,this value will be changed. 

    'If your device supports the TCP/IP communications, you can refer to this. 
    'when you are using the tcp/ip communication,you can distinguish different devices by their IP address. 
    Private Sub btnConnect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnConnect.Click 
     If txtIP.Text.Trim() = "" Or txtPort.Text.Trim() = "" Then 
      MsgBox("IP and Port cannot be null", MsgBoxStyle.Exclamation, "Error") 
      Return 
     End If 
     Dim idwErrorCode As Integer 
     Cursor = Cursors.WaitCursor 
     If btnConnect.Text = "Disconnect" Then 
      AxCZKEM1.Disconnect() 
      bIsConnected = False 
      btnConnect.Text = "Connect" 
      lblState.Text = "Current State:Disconnected" 
      Cursor = Cursors.Default 
      Return 
     End If 

     bIsConnected = AxCZKEM1.Connect_Net(txtIP.Text.Trim(), Convert.ToInt32(txtPort.Text.Trim())) 
     If bIsConnected = True Then 
      btnConnect.Text = "Disconnect" 
      btnConnect.Refresh() 
      lblState.Text = "Current State:Connected" 
      iMachineNumber = 1 'In fact,when you are using the tcp/ip communication,this parameter will be ignored,that is any integer will all right.Here we use 1. 
      AxCZKEM1.RegEvent(iMachineNumber, 65535) 'Here you can register the realtime events that you want to be triggered(the parameters 65535 means registering all) 
     Else 
      AxCZKEM1.GetLastError(idwErrorCode) 
      MsgBox("Unable to connect the device,ErrorCode=" & idwErrorCode, MsgBoxStyle.Exclamation, "Error") 
     End If 
     Cursor = Cursors.Default 


    End Sub 
    'If your device supports the SerialPort communications, you can refer to this. 
    Private Sub btnRsConnect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRsConnect.Click 
     If cbPort.Text.Trim() = "" Or cbBaudRate.Text.Trim() = "" Or txtMachineSN.Text.Trim() = "" Then 
      MsgBox("Port,BaudRate and MachineSN cannot be null", MsgBoxStyle.Exclamation, "Error") 
      Return 
     End If 
     Dim idwErrorCode As Integer 

     'accept serialport number from string like "COMi" 
     Dim iPort As Integer 
     'Dim sPort = cbPort.Text.Trim() 
     Dim sPort As String = cbPort.Text.Trim() 
     For iPort = 1 To 9 
      If sPort.IndexOf(iPort.ToString()) > -1 Then 
       Exit For 
      End If 
     Next 

     Cursor = Cursors.WaitCursor 
     If btnRsConnect.Text = "Disconnect" Then 
      AxCZKEM1.Disconnect() 
      bIsConnected = False 
      btnRsConnect.Text = "Connect" 
      lblState.Text = "Current State:Disconnected" 
      Cursor = Cursors.Default 
      Return 
     End If 

     iMachineNumber = Convert.ToInt32(txtMachineSN.Text.Trim()) '//when you are using the serial port communication,you can distinguish different devices by their serial port number. 
     bIsConnected = AxCZKEM1.Connect_Com(iPort, iMachineNumber, Convert.ToInt32(cbBaudRate.Text.Trim())) 

     If bIsConnected = True Then 
      btnRsConnect.Text = "Disconnect" 
      btnRsConnect.Refresh() 
      lblState.Text = "Current State:Connected" 
      AxCZKEM1.RegEvent(iMachineNumber, 65535) 'Here you can register the realtime events that you want to be triggered(the parameters 65535 means registering all) 
     Else 
      AxCZKEM1.GetLastError(idwErrorCode) 
      MsgBox("Unable to connect the device,ErrorCode=" & idwErrorCode, MsgBoxStyle.Exclamation, "Error") 
     End If 
     Cursor = Cursors.Default 
    End Sub 
    'If your device supports the USBCLient, you can refer to this. 
    'Not all series devices can support this kind of connection.Please make sure your device supports USBClient. 
    Private Sub btnUSBConnect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUSBConnect.Click 
     Dim idwErrorCode As Integer 

     Cursor = Cursors.WaitCursor 
     If btnUSBConnect.Text = "Disconnect" Then 
      AxCZKEM1.Disconnect() 
      bIsConnected = False 
      btnUSBConnect.Text = "Connect" 
      lblState.Text = "Current State:Disconnected" 
      Cursor = Cursors.Default 
      Return 
     End If 

     If rbUSB.Checked = True Then 'the common USBClient 
      iMachineNumber = 1 'In fact,when you are using common USBClient communication,parameter Machinenumber will be ignored,that is any integer will all right.Here we use 1. 
      bIsConnected = AxCZKEM1.Connect_USB(iMachineNumber) 
     Else 
      If rbVUSB.Checked = True Then 'connect the device via the virtual serial port created by USB 
       Dim sCom As String = "" 
       Dim bSearch As Boolean 
       Dim usbcom As New SearchforUSBCom 
       bSearch = usbcom.SearchforCom(sCom) 

       If bSearch = False Then 
        MsgBox("Can not find the virtual serial port that can be used", MsgBoxStyle.Exclamation, "Error") 
        Cursor = Cursors.Default 
        Return 
       End If 

       Dim iPort As Integer 
       For iPort = 1 To 9 
        If sCom.IndexOf(iPort.ToString()) > -1 Then 
         Exit For 
        End If 
       Next 

       iMachineNumber = Convert.ToInt32(txtMachineSN2.Text.Trim()) 
       If iMachineNumber = 0 Or iMachineNumber > 255 Then 
        MsgBox("The Machine Number is invalid!", MsgBoxStyle.Exclamation, "Error") 
        Cursor = Cursors.Default 
        Return 
       End If 

       Dim iBaudRate = 115200 '115200 is one possible baudrate value(its value cannot be 0) 
       bIsConnected = AxCZKEM1.Connect_Com(iPort, iMachineNumber, iBaudRate) 
      End If 

     End If 

     If bIsConnected = True Then 
      btnUSBConnect.Text = "Disconnect" 
      btnUSBConnect.Refresh() 
      lblState.Text = "Current State:Connected" 
      AxCZKEM1.RegEvent(iMachineNumber, 65535) 'Here you can register the realtime events that you want 
     Else 
      AxCZKEM1.GetLastError(idwErrorCode) 
      MsgBox("Unable to connect the device,ErrorCode=" & idwErrorCode, MsgBoxStyle.Exclamation, "Error") 
     End If 
     Cursor = Cursors.Default 
    End Sub 

    Private Sub rbVUSB_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rbVUSB.CheckedChanged 
     If rbVUSB.Checked = True Then 
      If bIsConnected = True Then 
       MsgBox("Invalid Operation!", MsgBoxStyle.Exclamation, "Error") 
       rbVUSB.Checked = False 
       Return 
      End If 
      rbUSB.Checked = False 
      txtMachineSN2.Enabled = True 
     End If 
    End Sub 

    Private Sub rbUSB_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rbUSB.CheckedChanged 
     If rbUSB.Checked = True Then 
      If bIsConnected = True Then 
       MsgBox("Invalid Operation!", MsgBoxStyle.Exclamation, "Error") 
       rbUSB.Checked = False 
       Return 
      End If 
      rbVUSB.Checked = False 
      txtMachineSN2.Enabled = False 
     End If 
    End Sub 
#End Region 

    ' ************************************************************************************************** 
    ' * Before you refer to this demo,we strongly suggest you read the development manual deeply first.* 
    ' * This part is for demonstrating operations with(read/get/clear) the attendance records.   * 
    ' * ************************************************************************************************ 
#Region "AttLogs" 
    'Download the attendance records from the device. 
    Private Sub btnGetGeneralLogData_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGetGeneralLogData.Click 
     If bIsConnected = False Then 
      MsgBox("Please connect the device first", MsgBoxStyle.Exclamation, "Error") 
      Return 
     End If 

     Dim idwTMachineNumber As Integer 
     Dim idwEnrollNumber As Integer 
     Dim idwEMachineNumber As Integer 
     Dim idwVerifyMode As Integer 
     Dim idwInOutMode As Integer 
     Dim idwYear As Integer 
     Dim idwMonth As Integer 
     Dim idwDay As Integer 
     Dim idwHour As Integer 
     Dim idwMinute As Integer 

     Dim idwErrorCode As Integer 
     Dim iGLCount = 0 
     Dim lvItem As New ListViewItem("Items", 0) 

     Cursor = Cursors.WaitCursor 
     lvLogs.Items.Clear() 
     AxCZKEM1.EnableDevice(iMachineNumber, False) 'disable the device 
     If AxCZKEM1.ReadGeneralLogData(iMachineNumber) Then 'read all the attendance records to the memory 
      'get records from the memory 
      While AxCZKEM1.GetGeneralLogData(iMachineNumber, idwTMachineNumber, idwEnrollNumber, idwEMachineNumber, idwVerifyMode, idwInOutMode, idwYear, idwMonth, idwDay, idwHour, idwMinute) 
       iGLCount += 1 
       lvItem = lvLogs.Items.Add(iGLCount.ToString()) 
       lvItem.SubItems.Add(idwEnrollNumber.ToString()) 
       lvItem.SubItems.Add(idwVerifyMode.ToString()) 
       lvItem.SubItems.Add(idwInOutMode.ToString()) 
       lvItem.SubItems.Add(idwYear.ToString() & "-" + idwMonth.ToString() & "-" & idwDay.ToString() & " " & idwHour.ToString() & ":" & idwMinute.ToString()) 
      End While 
     Else 
      Cursor = Cursors.Default 
      AxCZKEM1.GetLastError(idwErrorCode) 
      If idwErrorCode <> 0 Then 
       MsgBox("Reading data from terminal failed,ErrorCode: " & idwErrorCode, MsgBoxStyle.Exclamation, "Error") 
      Else 
       MsgBox("No data from terminal returns!", MsgBoxStyle.Exclamation, "Error") 
      End If 
     End If 

     AxCZKEM1.EnableDevice(iMachineNumber, True) 'enable the device 
     Cursor = Cursors.Default 
    End Sub 
    ' Download the attendance records from the device. 
    'The returned time is in strings(different from function GetGeneralLogData) 
    Private Sub btnGetGeneralLogDataStr_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGetGeneralLogDataStr.Click 
     If bIsConnected = False Then 
      MsgBox("Please connect the device first", MsgBoxStyle.Exclamation, "Error") 
      Return 
     End If 
     Dim idwErrorCode As Integer 

     Dim idwEnrollNumber As Integer 
     Dim idwVerifyMode As Integer 
     Dim idwInOutMode As Integer 
     Dim sTime = "" 

     Dim lvItem As New ListViewItem("Items", 0) 
     Dim iGLCount = 0 

     Cursor = Cursors.WaitCursor 
     lvLogs.Items.Clear() 
     AxCZKEM1.EnableDevice(iMachineNumber, False) 'disable the device 
     If AxCZKEM1.ReadGeneralLogData(iMachineNumber) Then 'read the records to the memory 
      'get the records from memory 
      While AxCZKEM1.GetGeneralLogDataStr(iMachineNumber, idwEnrollNumber, idwVerifyMode, idwInOutMode, sTime) 
       iGLCount += 1 
       lvItem = lvLogs.Items.Add(iGLCount.ToString()) 
       lvItem.SubItems.Add(idwEnrollNumber.ToString()) 
       lvItem.SubItems.Add(idwVerifyMode.ToString()) 
       lvItem.SubItems.Add(idwInOutMode.ToString()) 
       lvItem.SubItems.Add(sTime) 
      End While 
     Else 
      Cursor = Cursors.Default 
      AxCZKEM1.GetLastError(idwErrorCode) 
      If idwErrorCode <> 0 Then 
       MsgBox("Reading data from terminal failed,ErrorCode: " & idwErrorCode, MsgBoxStyle.Exclamation, "Error") 
      Else 
       MsgBox("No data from terminal returns!", MsgBoxStyle.Exclamation, "Error") 
      End If 
     End If 

     AxCZKEM1.EnableDevice(iMachineNumber, True) 'enable the device 
     Cursor = Cursors.Default 
    End Sub 
    ' Download the attendance records from the device. 
    '"GetGeneralExtLogData" is an enhanced function of the function GetGeneralLogData, but it is compatible with GetGeneralLogData. 
    ' Some machines have the WorkCode function; this function can gain the WorkCode when user passes the virification. 
    Private Sub btnGetGeneralExtLogData_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGetGeneralExtLogData.Click 
     If bIsConnected = False Then 
      MsgBox("Please connect the device first", MsgBoxStyle.Exclamation, "Error") 
      Return 
     End If 
     Dim idwErrorCode As Integer 

     Dim idwEnrollNumber As Integer 
     Dim idwVerifyMode As Integer 
     Dim idwInOutMode As Integer 
     Dim idwYear As Integer 
     Dim idwMonth As Integer 
     Dim idwDay As Integer 
     Dim idwHour As Integer 
     Dim idwMinute As Integer 
     Dim idwSecond As Integer 
     Dim idwWorkCode As Integer 
     Dim idwReserved As Integer 

     Dim lvItem As New ListViewItem("Items", 0) 
     Dim iGLCount = 0 

     Cursor = Cursors.WaitCursor 
     lvLogs.Items.Clear() 
     AxCZKEM1.EnableDevice(iMachineNumber, False) 'disable the device 
     If AxCZKEM1.ReadGeneralLogData(iMachineNumber) Then 'read the records to the memory 
      'get the records from memory 
      While AxCZKEM1.GetGeneralExtLogData(iMachineNumber, idwEnrollNumber, idwVerifyMode, idwInOutMode, idwYear, idwMonth, idwDay, idwHour, idwMinute, idwSecond, idwWorkCode, idwReserved) 
       iGLCount += 1 
       lvItem = lvLogs.Items.Add(iGLCount.ToString()) 
       lvItem.SubItems.Add(idwEnrollNumber.ToString()) 
       lvItem.SubItems.Add(idwVerifyMode.ToString()) 
       lvItem.SubItems.Add(idwInOutMode.ToString()) 
       lvItem.SubItems.Add(idwYear.ToString() & "-" + idwMonth.ToString() & "-" & idwDay.ToString() & " " & idwHour.ToString() & ":" & idwMinute.ToString() & ":" & idwSecond.ToString()) 
       lvItem.SubItems.Add(idwWorkCode.ToString()) 
       lvItem.SubItems.Add(idwReserved.ToString()) 
      End While 
     Else 
      Cursor = Cursors.Default 
      AxCZKEM1.GetLastError(idwErrorCode) 
      If idwErrorCode <> 0 Then 
       MsgBox("Reading data from terminal failed,ErrorCode: " & idwErrorCode, MsgBoxStyle.Exclamation, "Error") 
      Else 
       MsgBox("No data from terminal returns!", MsgBoxStyle.Exclamation, "Error") 
      End If 
     End If 

     AxCZKEM1.EnableDevice(iMachineNumber, True) 'enable the device 
     Cursor = Cursors.Default 
    End Sub 
    'Get the count of attendance records in from ternimal. 
    Private Sub btnGetDeviceStatus_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGetDeviceStatus.Click 
     If bIsConnected = False Then 
      MsgBox("Please connect the device first", MsgBoxStyle.Exclamation, "Error") 
      Return 
     End If 
     Dim idwErrorCode As Integer 
     Dim iValue = 0 

     AxCZKEM1.EnableDevice(iMachineNumber, False) 'disable the device 
     If AxCZKEM1.GetDeviceStatus(iMachineNumber, 6, iValue) = True Then 'Here we use the function "GetDeviceStatus" to get the record's count.The parameter "Status" is 6. 
      MsgBox("The count of the AttLogs in the device is " + iValue.ToString(), MsgBoxStyle.Information, "Success") 
     Else 
      AxCZKEM1.GetLastError(idwErrorCode) 
      MsgBox("Operation failed,ErrorCode=" & idwErrorCode, MsgBoxStyle.Exclamation, "Error") 
     End If 

     AxCZKEM1.EnableDevice(iMachineNumber, True) 'enable the device 
    End Sub 
    'Clear all attendance records from terminal. 
    Private Sub btnClearGLog_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnClearGLog.Click 
     If bIsConnected = False Then 
      MsgBox("Please connect the device first", MsgBoxStyle.Exclamation, "Error") 
      Return 
     End If 
     Dim idwErrorCode As Integer 

     lvLogs.Items.Clear() 
     AxCZKEM1.EnableDevice(iMachineNumber, False) 'disable the device 
     If AxCZKEM1.ClearGLog(iMachineNumber) = True Then 
      AxCZKEM1.RefreshData(iMachineNumber) 'the data in the device should be refreshed 
      MsgBox("All att Logs have been cleared from teiminal!", MsgBoxStyle.Information, "Success") 
     Else 
      AxCZKEM1.GetLastError(idwErrorCode) 
      MsgBox("Operation failed,ErrorCode=" & idwErrorCode, MsgBoxStyle.Exclamation, "Error") 
     End If 

     AxCZKEM1.EnableDevice(iMachineNumber, True) 'enable the device 
    End Sub 
#End Region 
End Class