Dahua NetSDK Ошибка 37: NET_CONFIG_GET_FAILED — сбой чтения настроек
- Метод
CLIENT_GetNewDevConfigилиCLIENT_GetDevConfigвозвращаетFALSEс кодом ошибки37. - Сервис не может вычитать список сетевых интерфейсов, каналов видеорегистратора или расписание праздников контроллера СКУД.
- SDK завершает вызов по внутреннему таймауту синхронного RPC запроса.
1. Проверка индекса канала (nChannelID)
В Dahua NetSDK индексация физических каналов в одних структурах начинается с 0, а в других (например, СКУД двери/считыватели) с 1 или -1 (для глобальной конфигурации):
// Для общесистемных конфигураций (Network, NTP, General) используйте индекс -1
int nChannel = -1;
char szOutBuffer[1024 * 32] = { 0 };
int nError = 0;
BOOL bSuccess = CLIENT_GetNewDevConfig(
lLoginHandle,
CFG_CMD_NET_BASIC,
nChannel,
szOutBuffer,
sizeof(szOutBuffer),
&nError,
3000
);2. Проверка размера выделяемого буфера (szOutBuffer)
Если переданный буфер меньше, чем размер возвращаемого блоком конфигурации JSON/бинарного пакета, SDK вернет ошибку 37:
// Выделяйте достаточный размер памяти под большие конфигурационные блоки (например, Alarm/Record)
const int BUFFER_SIZE = 1024 * 128; // 128 KB
char* pBuffer = (char*)malloc(BUFFER_SIZE);
memset(pBuffer, 0, BUFFER_SIZE);
// вызов CLIENT_GetNewDevConfig...
free(pBuffer);3. Проверка поддержки команды устройством
Некоторые устройства (например, тепловизоры или IP-домофоны) не поддерживают стандартные команды аналоговых NVR. Проверьте возможности устройства (Device Capabilities):
NET_DEV_ABILITY_INFO stAbility = { sizeof(stAbility) };
BOOL bRet = CLIENT_QueryAbility(lLoginHandle, ABILITY_DEVALL_INFO, (char*)&stAbility, sizeof(stAbility), 3000);4. Включение расширенного логирования NetSDK
LOG_SET_PRINT_INFO stLogInfo = { sizeof(stLogInfo) };
stLogInfo.bSetPrint = TRUE;
stLogInfo.bSetSave = TRUE;
strncpy(stLogInfo.szLogPath, "./sdk_log.log", sizeof(stLogInfo.szLogPath));
CLIENT_LogOpen(&stLogInfo); Частые вопросы (FAQ)
Почему CLIENT_GetDevConfig возвращает ошибку 37 на современных IP-камерах?
Функция CLIENT_GetDevConfig является устаревшей (Legacy API). В актуальных линейках камер Dahua (IPC-HX5xxx, WizMind) используйте исключительно CLIENT_GetNewDevConfig.
Что делать, если nError возвращает код переполнения буфера?
Увеличьте размер выходного массива char[] до 256KB или 512KB. Для объемных конфигураций журналов доступа или пользователей используйте пакетную выгрузку через специализированные интерфейсы CLIENT_FindRecord / CLIENT_QueryRecord.
Может ли ошибка 37 возникать из-за высокой загрузки CPU регистратора?
Да, при 100% утилизации CPU NVR (например, в момент активного экспорта архива или перегрузки видеоаналитикой) внутренний процесс daemon отбрасывает запросы по внутреннему таймауту 3 сек. Увеличьте nWaitTime до 10000 мс.
Как проверить, поддерживает ли устройство конкретный тип CFG_CMD?
Используйте интерфейс CLIENT_QueryDevCaps или CLIENT_QueryDevAbility с флагом нужной подсистемы перед чтением специфических конфигураций (Face Detection, ANPR, AccessControl).