Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

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

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'.

Полезные материалы
Рекомендуем