Центр Диагностики & База Системных Ошибок

Решения для Windows Server, Active Directory, 1С, СУБД, Linux, Cisco, MikroTik и IP-телефонии.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, баз данных и сетевого оборудования. Перед выполнением действий обязательно создайте резервную копию. При отсутствии необходимой квалификации обратитесь к ИТ-специалистам.
NET_DVR_ORDER_ERROR (11) IP-Телефония и СКУД

Hikvision HCNetSDK Ошибка 11: NET_DVR_ORDER_ERROR — неверный порядок вызова

Обновлено: 24.08.2026  ·  Официальная база знаний
  • Функция SDK возвращает FALSE с кодом ошибки 11.
  • Попытка чтения данных до завершения процесса поиска (Search/Find Handle).
  • Вызов функций управления потоком до успешной авторизации или инициализации канала.

1. Соблюдение строгой последовательности API при поиске файлов

Классическая ошибка — вызов NET_DVR_FindNextFile без предварительного успешного вызова NET_DVR_FindFile или после его закрытия:

// 1. Инициализация поиска
LONG lFindHandle = NET_DVR_FindFile_V40(lUserID, &struFindParam);
if (lFindHandle < 0) {
    printf("FindFile failed: %d\n", NET_DVR_GetLastError());
    return;
}

// 2. Итеративное чтение в цикле
NET_DVR_FINDDATA_V40 struFileData = { 0 };
while (true) {
    LONG lStatus = NET_DVR_FindNextFile_V40(lFindHandle, &struFileData);
    if (lStatus == NET_DVR_FILE_SUCCESS) {
        printf("File: %s, Size: %d\n", struFileData.sFileName, struFileData.dwFileSize);
    } else if (lStatus == NET_DVR_FILE_NOFIND || lStatus == NET_DVR_NOMOREFILE) {
        break; // Конец списка
    } else if (lStatus == NET_DVR_FILE_EXCEPTION) {
        break;
    }
}

// 3. ОБЯЗАТЕЛЬНОЕ закрытие хэндла поиска
NET_DVR_FindClose_V30(lFindHandle);

2. Проверка последовательности работы с видеопотоком

Нельзя вызывать функции управления декодером (NET_DVR_PlayBackControl, пауза, перемотка) до получения подтверждения успешного старта сессии воспроизведения (NET_DVR_PlayBackByTime).

3. Исключение повторного закрытия дескрипторов (Double Free)

Сбрасывайте переменные дескрипторов в -1 сразу после вызова функций остановки/закрытия, чтобы избежать повторного обращения к уничтоженным объектам.

Практический опыт инженера: Распространенная ошибка многопоточности — вызов NET_DVR_Logout(lUserID) в одном потоке, пока рабочий поток еще считывает данные через FindNextFile или RealPlay. Это немедленно переводит все дочерние операции в статус ошибки 11.

Частые вопросы (FAQ)

Почему ошибка 11 возникает при попытке сделать скриншот кадра (NET_DVR_CapturePicture)?

Функция NET_DVR_CapturePicture требует активного декодирования потока в окно (HWND). Если вы захватываете поток в режиме без окна (RAW stream), используйте NET_DVR_SetRealDataCallBack и декодируйте кадр самостоятельно.

Можно ли выполнять поиск файлов по нескольким каналам параллельно?

Да, но каждый поток обязан создавать собственный независимый FindHandle через NET_DVR_FindFile_V40 и освобождать его своим вызовом NET_DVR_FindClose.

Что означает ошибка 11 при конфигурации параметров камеры?

Это означает, что нарушен порядок транзакции: например, отправлен запрос на сохранение данных (SetDVRConfig) без предварительного запроса базовой версии структуры через (GetDVRConfig).

Как гарантировать правильный порядок вызовов в асинхронном коде?

Используйте конечные автоматы (State Machine) или механизмы синхронизации (Mutex / Semaphore / Promises), предотвращающие вызов зависимых функций до перехода сессии в статус 'Ready'.