Я строю систему регистрации отпечатков пальцев с помощью Hikvision SDK, который я загрузил с их веб -сайта, а язык, который я использую, C#. Из образца разделения кода для регистрации карты я попробовал вход в систему, и устройство входит в систему, и когда я пытаюсь добавить элемент с помощью карты, установленного к устройству, он дает ошибку net_dvr_set_card Ошибка 9. Ill Прикрепите скриншот пользовательского интерфейса и код формы и заболевание также прикрепляют файл Zip, содержащий все пример в SDK. Пожалуйста, помогите мне. Спасибо < /p>
ui меню регистрации карты < /p>
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Globalization;
using System.Reflection;
using CardManagement.Language;
namespace CardManagement
{
public partial class CardManagement : Form
{
public static int m_UserID = 1;
public Int32 m_lGetCardCfgHandle = 1;
public Int32 m_lSetCardCfgHandle = 1;
public Int32 m_lDelCardCfgHandle = 1;
public CardManagement()
{
InitializeComponent();
if (CHCNetSDK.NET_DVR_Init() == false)
{
MessageBox.Show("NET_DVR_Init error!");
return;
}
comboBoxLanguage.SelectedIndex = 0;
CHCNetSDK.NET_DVR_SetLogToFile(3, "./", false);
}
private void btnLogin_Click(object sender, EventArgs e)
{
AddDevice dlg = new AddDevice();
dlg.ShowDialog();
dlg.Dispose();
}
private void CardManagement_FormClosing(object sender, FormClosingEventArgs e)
{
if (m_UserID >= 0)
{
CHCNetSDK.NET_DVR_Logout_V30(m_UserID);
m_UserID = -1;
}
CHCNetSDK.NET_DVR_Cleanup();
}
private void btnSet_Click(object sender, EventArgs e)
{
if (m_UserID < 0)
{
MessageBox.Show("Please log in to the device first.");
return;
}
if (m_lSetCardCfgHandle != -1)
{
if (CHCNetSDK.NET_DVR_StopRemoteConfig(m_lSetCardCfgHandle))
{
m_lSetCardCfgHandle = -1;
}
}
CHCNetSDK.NET_DVR_CARD_COND struCond = new CHCNetSDK.NET_DVR_CARD_COND();
struCond.Init();
struCond.dwSize = (uint)Marshal.SizeOf(struCond);
struCond.dwCardNum = 1;
IntPtr ptrStruCond = Marshal.AllocHGlobal((int)struCond.dwSize);
Marshal.StructureToPtr(struCond, ptrStruCond, false);
m_lSetCardCfgHandle = CHCNetSDK.NET_DVR_StartRemoteConfig(m_UserID, CHCNetSDK.NET_DVR_SET_CARD, ptrStruCond, (int)struCond.dwSize, null, IntPtr.Zero);
Marshal.FreeHGlobal(ptrStruCond);
if (m_lSetCardCfgHandle < 0)
{
MessageBox.Show("NET_DVR_SET_CARD error: " + CHCNetSDK.NET_DVR_GetLastError());
return;
}
SendCardData();
}
private void SendCardData()
{
CHCNetSDK.NET_DVR_CARD_RECORD struData = new CHCNetSDK.NET_DVR_CARD_RECORD();
struData.Init();
struData.dwSize = (uint)Marshal.SizeOf(struData);
// Validate card number
byte[] byTempCardNo = Encoding.UTF8.GetBytes(textBoxCardNo.Text);
if (byTempCardNo.Length > CHCNetSDK.ACS_CARD_NO_LEN)
{
MessageBox.Show("Card number exceeds maximum length.");
return;
}
Array.Copy(byTempCardNo, struData.byCardNo, byTempCardNo.Length);
// Validate employee number
if (!uint.TryParse(textBoxEmployeeNo.Text, out struData.dwEmployeeNo))
{
MessageBox.Show("Invalid employee number.");
return;
}
// Set card details
struData.byCardType = 1;
struData.byLeaderCard = 0;
struData.struValid.byEnable = 1;
// Validity period
struData.struValid.struBeginTime.wYear = 2023;
struData.struValid.struBeginTime.byMonth = 1;
struData.struValid.struBeginTime.byDay = 1;
struData.struValid.struEndTime.wYear = 2030;
struData.struValid.struEndTime.byMonth = 12;
struData.struValid.struEndTime.byDay = 31;
// Door access rights
struData.byDoorRight[0] = 1;
IntPtr ptrStruData = Marshal.AllocHGlobal((int)struData.dwSize);
Marshal.StructureToPtr(struData, ptrStruData, false);
CHCNetSDK.NET_DVR_CARD_STATUS struStatus = new CHCNetSDK.NET_DVR_CARD_STATUS();
struStatus.Init();
struStatus.dwSize = (uint)Marshal.SizeOf(struStatus);
IntPtr ptrdwState = Marshal.AllocHGlobal((int)struStatus.dwSize);
Marshal.StructureToPtr(struStatus, ptrdwState, false);
int dwState;
uint dwReturned = 0;
while (true)
{
dwState = CHCNetSDK.NET_DVR_SendWithRecvRemoteConfig(m_lSetCardCfgHandle, ptrStruData, struData.dwSize, ptrdwState, struStatus.dwSize, ref dwReturned);
struStatus = (CHCNetSDK.NET_DVR_CARD_STATUS)Marshal.PtrToStructure(ptrdwState, typeof(CHCNetSDK.NET_DVR_CARD_STATUS));
if (dwState == (int)CHCNetSDK.NET_SDK_SENDWITHRECV_STATUS.NET_SDK_CONFIG_STATUS_SUCCESS)
{
MessageBox.Show(struStatus.dwErrorCode == 0 ? "Card configuration successful." : $"Success with error: {struStatus.dwErrorCode}");
break;
}
else if (dwState == (int)CHCNetSDK.NET_SDK_SENDWITHRECV_STATUS.NET_SDK_CONFIG_STATUS_FAILED)
{
MessageBox.Show("Failed to configure card: " + CHCNetSDK.NET_DVR_GetLastError());
break;
}
else if (dwState == (int)CHCNetSDK.NET_SDK_SENDWITHRECV_STATUS.NET_SDK_CONFIG_STATUS_NEEDWAIT)
{
Thread.Sleep(10);
continue;
}
else
{
MessageBox.Show("Unexpected status: " + CHCNetSDK.NET_DVR_GetLastError());
break;
}
}
CHCNetSDK.NET_DVR_StopRemoteConfig(m_lSetCardCfgHandle);
m_lSetCardCfgHandle = -1;
Marshal.FreeHGlobal(ptrStruData);
Marshal.FreeHGlobal(ptrdwState);
}
private void btnGet_Click(object sender, EventArgs e)
{
if (m_lGetCardCfgHandle != -1)
{
if (CHCNetSDK.NET_DVR_StopRemoteConfig(m_lGetCardCfgHandle))
{
m_lGetCardCfgHandle = -1;
}
}
CHCNetSDK.NET_DVR_CARD_COND struCond = new CHCNetSDK.NET_DVR_CARD_COND();
struCond.Init();
struCond.dwSize = (uint)Marshal.SizeOf(struCond);
struCond.dwCardNum = 1;
IntPtr ptrStruCond = Marshal.AllocHGlobal((int)struCond.dwSize);
Marshal.StructureToPtr(struCond, ptrStruCond, false);
CHCNetSDK.NET_DVR_CARD_RECORD struData = new CHCNetSDK.NET_DVR_CARD_RECORD();
struData.Init();
struData.dwSize = (uint)Marshal.SizeOf(struData);
byte[] byTempCardNo = new byte[CHCNetSDK.ACS_CARD_NO_LEN];
byTempCardNo = System.Text.Encoding.UTF8.GetBytes(textBoxCardNo.Text);
for (int i = 0; i < byTempCardNo.Length; i++)
{
struData.byCardNo = byTempCardNo;
}
IntPtr ptrStruData = Marshal.AllocHGlobal((int)struData.dwSize);
Marshal.StructureToPtr(struData, ptrStruData, false);
CHCNetSDK.NET_DVR_CARD_SEND_DATA struSendData = new CHCNetSDK.NET_DVR_CARD_SEND_DATA();
struSendData.Init();
struSendData.dwSize = (uint)Marshal.SizeOf(struSendData);
for (int i = 0; i < byTempCardNo.Length; i++)
{
struSendData.byCardNo = byTempCardNo;
}
IntPtr ptrStruSendData = Marshal.AllocHGlobal((int)struSendData.dwSize);
Marshal.StructureToPtr(struSendData, ptrStruSendData, false);
m_lGetCardCfgHandle = CHCNetSDK.NET_DVR_StartRemoteConfig(m_UserID, CHCNetSDK.NET_DVR_GET_CARD, ptrStruCond, (int)struCond.dwSize, null, this.Handle);
if (m_lGetCardCfgHandle < 0)
{
MessageBox.Show("NET_DVR_GET_CARD error: " + CHCNetSDK.NET_DVR_GetLastError());
Marshal.FreeHGlobal(ptrStruCond);
return;
}
else
{
int dwState = (int)CHCNetSDK.NET_SDK_SENDWITHRECV_STATUS.NET_SDK_CONFIG_STATUS_SUCCESS;
uint dwReturned = 0;
while(true)
{
dwState = CHCNetSDK.NET_DVR_SendWithRecvRemoteConfig(m_lGetCardCfgHandle, ptrStruSendData, struSendData.dwSize, ptrStruData, struData.dwSize, ref dwReturned);
struData = (CHCNetSDK.NET_DVR_CARD_RECORD)Marshal.PtrToStructure(ptrStruData, typeof(CHCNetSDK.NET_DVR_CARD_RECORD));
if (dwState == (int)CHCNetSDK.NET_SDK_SENDWITHRECV_STATUS.NET_SDK_CONFIG_STATUS_NEEDWAIT)
{
Thread.Sleep(10);
continue;
}
else if (dwState == (int)CHCNetSDK.NET_SDK_SENDWITHRECV_STATUS.NET_SDK_CONFIG_STATUS_FAILED)
{
MessageBox.Show("NET_DVR_GET_CARD fail error: " + CHCNetSDK.NET_DVR_GetLastError());
}
else if (dwState == (int)CHCNetSDK.NET_SDK_SENDWITHRECV_STATUS.NET_SDK_CONFIG_STATUS_SUCCESS)
{
textBoxCardNo.Text = System.Text.Encoding.Default.GetString(struData.byCardNo);
textBoxCardRightPlan.Text = struData.wCardRightPlan[0].ToString();
textBoxEmployeeNo.Text = struData.dwEmployeeNo.ToString();
textBoxName.Text = System.Text.Encoding.Default.GetString(struData.byName);
MessageBox.Show("NET_DVR_GET_CARD success");
}
else if (dwState == (int)CHCNetSDK.NET_SDK_SENDWITHRECV_STATUS.NET_SDK_CONFIG_STATUS_FINISH)
{
MessageBox.Show("NET_DVR_GET_CARD finish");
break;
}
else if (dwState == (int)CHCNetSDK.NET_SDK_SENDWITHRECV_STATUS.NET_SDK_CONFIG_STATUS_EXCEPTION)
{
MessageBox.Show("NET_DVR_GET_CARD exception error: " + CHCNetSDK.NET_DVR_GetLastError());
break;
}
else
{
MessageBox.Show("unknown status error: " + CHCNetSDK.NET_DVR_GetLastError());
break;
}
}
}
CHCNetSDK.NET_DVR_StopRemoteConfig(m_lGetCardCfgHandle);
m_lGetCardCfgHandle = -1;
Marshal.FreeHGlobal(ptrStruSendData);
Marshal.FreeHGlobal(ptrStruData);
return;
}
private void btnDelete_Click(object sender, EventArgs e)
{
if (m_lDelCardCfgHandle != -1)
{
if (CHCNetSDK.NET_DVR_StopRemoteConfig(m_lDelCardCfgHandle))
{
m_lDelCardCfgHandle = -1;
}
}
CHCNetSDK.NET_DVR_CARD_COND struCond = new CHCNetSDK.NET_DVR_CARD_COND();
struCond.Init();
struCond.dwSize = (uint)Marshal.SizeOf(struCond);
struCond.dwCardNum = 1;
IntPtr ptrStruCond = Marshal.AllocHGlobal((int)struCond.dwSize);
Marshal.StructureToPtr(struCond, ptrStruCond, false);
CHCNetSDK.NET_DVR_CARD_SEND_DATA struSendData = new CHCNetSDK.NET_DVR_CARD_SEND_DATA();
struSendData.Init();
struSendData.dwSize = (uint)Marshal.SizeOf(struSendData);
byte[] byTempCardNo = new byte[CHCNetSDK.ACS_CARD_NO_LEN];
byTempCardNo = System.Text.Encoding.UTF8.GetBytes(textBoxCardNo.Text);
for (int i = 0; i < byTempCardNo.Length; i++)
{
struSendData.byCardNo = byTempCardNo;
}
IntPtr ptrStruSendData = Marshal.AllocHGlobal((int)struSendData.dwSize);
Marshal.StructureToPtr(struSendData, ptrStruSendData, false);
CHCNetSDK.NET_DVR_CARD_STATUS struStatus = new CHCNetSDK.NET_DVR_CARD_STATUS();
struStatus.Init();
struStatus.dwSize = (uint)Marshal.SizeOf(struStatus);
IntPtr ptrdwState = Marshal.AllocHGlobal((int)struStatus.dwSize);
Marshal.StructureToPtr(struStatus, ptrdwState, false);
m_lGetCardCfgHandle = CHCNetSDK.NET_DVR_StartRemoteConfig(m_UserID, CHCNetSDK.NET_DVR_DEL_CARD, ptrStruCond, (int)struCond.dwSize, null, this.Handle);
if (m_lGetCardCfgHandle < 0)
{
MessageBox.Show("NET_DVR_DEL_CARD error:" + CHCNetSDK.NET_DVR_GetLastError());
Marshal.FreeHGlobal(ptrStruCond);
return;
}
else
{
int dwState = (int)CHCNetSDK.NET_SDK_SENDWITHRECV_STATUS.NET_SDK_CONFIG_STATUS_SUCCESS;
uint dwReturned = 0;
while (true)
{
dwState = CHCNetSDK.NET_DVR_SendWithRecvRemoteConfig(m_lGetCardCfgHandle, ptrStruSendData, struSendData.dwSize, ptrdwState, struStatus.dwSize, ref dwReturned);
if (dwState == (int)CHCNetSDK.NET_SDK_SENDWITHRECV_STATUS.NET_SDK_CONFIG_STATUS_NEEDWAIT)
{
Thread.Sleep(10);
continue;
}
else if (dwState == (int)CHCNetSDK.NET_SDK_SENDWITHRECV_STATUS.NET_SDK_CONFIG_STATUS_FAILED)
{
MessageBox.Show("NET_DVR_DEL_CARD fail error: " + CHCNetSDK.NET_DVR_GetLastError());
}
else if (dwState == (int)CHCNetSDK.NET_SDK_SENDWITHRECV_STATUS.NET_SDK_CONFIG_STATUS_SUCCESS)
{
MessageBox.Show("NET_DVR_DEL_CARD success");
}
else if (dwState == (int)CHCNetSDK.NET_SDK_SENDWITHRECV_STATUS.NET_SDK_CONFIG_STATUS_FINISH)
{
MessageBox.Show("NET_DVR_DEL_CARD finish");
break;
}
else if (dwState == (int)CHCNetSDK.NET_SDK_SENDWITHRECV_STATUS.NET_SDK_CONFIG_STATUS_EXCEPTION)
{
MessageBox.Show("NET_DVR_DEL_CARD exception error: " + CHCNetSDK.NET_DVR_GetLastError());
break;
}
else
{
MessageBox.Show("unknown status error: " + CHCNetSDK.NET_DVR_GetLastError());
break;
}
}
}
CHCNetSDK.NET_DVR_StopRemoteConfig(m_lDelCardCfgHandle);
m_lDelCardCfgHandle = -1;
Marshal.FreeHGlobal(ptrStruSendData);
Marshal.FreeHGlobal(ptrdwState);
}
private void comboBoxLanguage_SelectedIndexChanged(object sender, EventArgs e)
{
if (comboBoxLanguage.Text != null)
{
MultiLanguage.SetDefaultLanguage(comboBoxLanguage.Text);
foreach (Form form in Application.OpenForms)
{
MultiLanguage.LoadLanguage(form);
}
if (comboBoxLanguage.Text == "English")
{
Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US");
}
else if (comboBoxLanguage.Text == "Chinese")
{
Thread.CurrentThread.CurrentUICulture = new CultureInfo("zh-CN");
}
}
}
}
}
< /code>
Я попытался изменить формат длины данных I ввода. В основном я понятия не имею, что делать, так как я новичок в этом. Запись пальца работает нормально от SDK, если я зарегистрирую Memeber First Frmo IVMS 4200 AC
Подробнее здесь: https://stackoverflow.com/questions/793 ... emen-error
Hikvision C# sdk NET_DVR_SET_CARD ОШИБКА 9 ОШИБКА КАРТЫ И РЕГИСТРАЦИИ УЧАСТНИКА ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
OpenCV VideoCapture Class занимает много времени, чтобы открыть камеру, подключенную с DVR
Anonymous » » в форуме JAVA - 0 Ответы
- 6 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Чтение RFID на считывателе Hikvision DS-K1 F 100D 8E с использованием SDK (HCUsbSDK)
Anonymous » » в форуме C# - 0 Ответы
- 31 Просмотры
-
Последнее сообщение Anonymous
-