private void ReadLog() { IntPtr logRecord = Marshal.AllocHGlobal(m_NumOfLog * Marshal.SizeOf(typeof(BSSDK.BSLogRecord))); int logTotalCount = 0; int logCount = 0; do { Cursor.Current = Cursors.WaitCursor; int result = 0; IntPtr buf = new IntPtr(logRecord.ToInt32() + logTotalCount * Marshal.SizeOf(typeof(BSSDK.BSLogRecord))); if (logTotalCount == 0) { result = BSSDK.BS_ReadLog(m_Handle, 0, 0, ref logCount, buf); } else { result = BSSDK.BS_ReadNextLog(m_Handle, 0, 0, ref logCount, buf); } if (result != BSSDK.BS_SUCCESS) { Marshal.FreeHGlobal(logRecord); MessageBox.Show("Cannot read log records", "Error"); Cursor.Current = Cursors.WaitCursor; return; } logTotalCount += logCount; } while (logCount == 8192); Cursor.Current = Cursors.WaitCursor; logList.Items.Clear(); for (int i = 0; i < logTotalCount; i++) { BSSDK.BSLogRecord record = (BSSDK.BSLogRecord)Marshal.PtrToStructure(new IntPtr(logRecord.ToInt32() + i * Marshal.SizeOf(typeof(BSSDK.BSLogRecord))), typeof(BSSDK.BSLogRecord)); DateTime eventTime = new DateTime(1970, 1, 1).AddSeconds(record.eventTime); ListViewItem item = logList.Items.Add(eventTime.ToString()); item.SubItems.Add(record.userID.ToString()); item.SubItems.Add(GetEventStr(record.eventType)); item.SubItems.Add(GetTNAStr(record.tnaEvent)); item.SubItems.Add(GetReaderID(record.reserved)); item.SubItems.Add(record.eventType.ToString()); item.SubItems.Add(record.eventTime.ToString()); } numOfLog.Text = logTotalCount.ToString(); Marshal.FreeHGlobal(logRecord); }