Dahua NetSDK Error 8: NET_ILLEGAL_PARAM — недопустимый параметр вызова API
- Вызов любой функции SDK мгновенно возвращает
FALSEс кодом8(NET_ILLEGAL_PARAM). - Команда не отправляется в сеть и отбрасывается на уровне внутренней валидации библиотеки NetSDK.
- Ошибка при попытке изменения сетевых настроек, параметров видеодетекции или пользователей.
1. Проверка инициализации поля dwSize
Самая распространенная причина ошибки 8 — не установленный или неверно рассчитанный размер структуры в первом поле dwSize:
NET_RECORD_SET_CONFIG_IN stIn = { sizeof(stIn) };
NET_RECORD_SET_CONFIG_OUT stOut = { sizeof(stOut) };
// Обязательная явная установка размеров
stIn.dwSize = sizeof(NET_RECORD_SET_CONFIG_IN);
stOut.dwSize = sizeof(NET_RECORD_SET_CONFIG_OUT);
BOOL bRet = CLIENT_SetDVRConfig(lLoginID, NET_EM_CFG_RECORD, 0, &stIn, sizeof(stIn), 5000, &stOut);2. Проверка указателей на NULL
Убедитесь, что обязательные выходные буферы или строки не содержат нулевых указателей:
char szSerial[64] = { 0 };
int nRetLen = 0;
// szSerial и &nRetLen не должны быть NULL
CLIENT_QueryDevState(lLoginID, DH_DEVSTATE_SN, szSerial, sizeof(szSerial), &nRetLen, 3000);3. Проверка диапазонов числовых аргументов
Убедитесь, что номера каналов, потоков, портов и значения битрейта находятся в допустимых границах для данной модели оборудования.
Частые вопросы (FAQ)
Почему SDK возвращает NET_ILLEGAL_PARAM до отправки сетевого пакета?
Потому что функция проводит локальную проверку валидности входных аргументов, размеров структур (dwSize) и наличия обязательных указателей.
Как избежать ошибки при маршалинге структур в C#?
В структурах C# обязательно используйте атрибут [StructLayout(LayoutKind.Sequential)] и явно задавайте поле dwSize = (uint)Marshal.SizeOf(typeof(MyStruct)).
Что делать, если структура в SDK содержит union?
Внимательно инициализируйте соответствующий тип объединения и выставляйте флаг перечисления, указывающий, какая ветка union активна.
Может ли неверная длина пароля вызывать ошибку 8?
Да, передача строки пароля или логина, превышающей выделенный фиксированный размер буфера (например, > 64 байт), вызовет ошибку параметров.