Добрый день!
Хочу спросить совета для функции ZG_Ctr_WriteKeys у разработчиков.
Имеем оборудование Z-397 Web и SDK ZGuard, версия 3.34.
Моя процедура записи ключей в контроллер использует -1 в качестве параметра nIdx:
Idx
[in] Номер первой карты, записываемой в контроллер. Если =-1, то используется значение верхней границы ключей (ZG_Ctr_GetKeyTopIndex).
public void InsertKeys(string[] keys)
{
if (_hCtr == IntPtr.Zero)
{
throw new ApplicationException("Связь с турникетом не установлена. Попробуйте ваше действие позже.");
}
int nKeyIdx = -1;
int hr;
//hr = ZGIntf.ZG_Ctr_GetKeyTopIndex(_hCtr, ref nKeyIdx);
//if (hr < 0)
//{
// var msg = String.Format("Ошибка ZG_Ctr_GetKeyTopIndex ({0}).", hr);
// Trace.WriteLine(msg);
// throw new ApplicationException(msg);
//}
ZG_CTR_KEY[] aKeys = new ZG_CTR_KEY[keys.Length];
for (int i = 0; i < keys.Length; i++)
{
aKeys[i].nType = ZG_CTR_KEY_TYPE.ZG_KEY_NORMAL;
aKeys[i].nAccess = 0x01;
//aKeys[i].nAccess = 0xff;
aKeys[i].rNum = ZGIntf.StrToCardNum(keys[i]);
}
hr = ZGIntf.ZG_Ctr_WriteKeys(_hCtr, nKeyIdx, aKeys, aKeys.Length, null);
if (hr < 0)
{
var msg = String.Format("Ошибка ZG_Ctr_WriteKeys ({0}).", hr);
Trace.WriteLine(msg);
throw new ApplicationException(msg);
}
else
Trace.WriteLine(String.Format("InsertKeys в контроллер {1} успешно {0}.", String.Join(" - ",keys), Sn));
}
Исходный код процедуры был взят из примеров в SDK, проект CtrKeys, файл Program, метод DoSetKey.
Моя проблема состоит в том, что следуя документации и передавая -1 в качестве параметра nIdx, функция выполняется с ошибкой:
E_INVALIDARG 80070057h Неправильные параметры. -2147024809
Помогите, пожалуйста, разобраться!
Расчёт был такой, что мне не понадобится предварительно вызывать ZG_Ctr_GetKeyTopIndex для получения параметра nIdx.
С уважением