Привет всем,
пробую разобраться с WinSNMP. Прочитал в МСДН все про это дело, все вроде понятно — а не работает.
Для начала я просто хотел узнать время, прошедшее с момента загрузки компьютера.
Вот написал такой код:
SNMPAPI_STATUS CALLBACK fCallback(HSNMP_SESSION hSession, HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, LPVOID lpClientData)
{
MessageBeep(0);
return SNMPAPI_SUCCESS;
}
int main(int argc, char* argv[])
{
DWORD EC;
SNMPAPI_STATUS status;
// startup for SNMP
smiUINT32 MayorVersion, MinorVersion;
smiUINT32 SupportLevel;
smiUINT32 TranslateMode;
smiUINT32 RetransmitMode;
status = SnmpStartup(
&MayorVersion, &MinorVersion, // version
&SupportLevel, // Support level
&TranslateMode,
&RetransmitMode);
// session
HSNMP_SESSION hSession = SnmpCreateSession(0, 0, fCallback, NULL);
EC = SnmpGetLastError(hSession);
// PDU
smiOID name;
SnmpStrToOid(".1.3.6.1.2.1.7.4.0", &name);
smiVALUE value;
value.syntax = SNMP_SYNTAX_INT32;
HSNMP_VBL hVbl = SnmpCreateVbl(hSession, &name, &value);
EC = SnmpGetLastError(hSession);
HSNMP_PDU hPDU = SnmpCreatePdu(hSession, SNMP_PDU_GET, NULL, NULL, NULL, hVbl);
EC = SnmpGetLastError(hSession);
// SRC/DST entities
HSNMP_ENTITY hSrc = SnmpStrToEntity(hSession, "192.168.31.75");
EC = SnmpGetLastError(hSession);
HSNMP_ENTITY hDst = SnmpStrToEntity(hSession, "192.168.31.76");
EC = SnmpGetLastError(hSession);
// Context
smiOCTETS Context;
const char *pszCommunity = "Zhenya";
Context.ptr = (smiLPBYTE)pszCommunity;
Context.len = lstrlen(pszCommunity);
HSNMP_CONTEXT hContext = SnmpStrToContext(hSession, &Context);
EC = SnmpGetLastError(hSession);
// send request
status = SnmpSendMsg(hSession, hSrc, hDst, hContext, hPDU);
EC = SnmpGetLastError(hSession);
return 0;
}
Я хочу получать ответы на запросы в CALLBACK-функцию (у меня нет окон), в ней поставил пищалку и контрольную точку. Не работает. Т.е. все вызовы функций возвращают нормальные значения, код ошибки SNMPAPI_SUCCESS, но управление в функцию обратного вызова не передается никогда.
Смотрел сниффером — ответ на запрос приходит. Попробовал решить ту же проблему с добытым в инете софтом Carnegie Mellon Univercity — там все работает, т.е. все системные вещи вроде настроены правильно (SNMP-агент, community etc). В снифере запросы и ответы выглядят в обоих случаях похоже. Чо делать, кто поможет? Не хотелось бы ковыряться в тех исходниках, тем более, что ребята из Микрософта все вроде сделали...
Заранее большое спасибо
Евгений.
Зато я сам все понял, что я был совсем неправ. Как же управление попадет в callback-функцию, если мы в отладчике стоим на контрольной точке в однонитевом приложении? Убрал контрольную точку в конце, поставил вместо нее Sleep(100000), чтобы только приложение не закрывалось, и все заработало. Можно было и getch() какой-нибудь...
Обидно другое — как же я на этом накололся-то? Не первый день, чай, замужем. Плавали, знаем, а тут взял и забыл, как студент

И даже расстроился как-то, хотел уж от WinSNMP отказываться....
Короче, отбой тревоги. Зато сам с собой в конфе поговорил. Я чего не поговорить с умным человеком? Слушает внимательно, не перебивает, всегда соглашается...
Евгений
Здравствуйте, ekozhevnikov, Вы писали:
E>Зато я сам все понял, что я был совсем неправ. Как же управление попадет в callback-функцию, если мы в отладчике стоим на контрольной точке в однонитевом приложении? Убрал контрольную точку в конце, поставил вместо нее Sleep(100000), чтобы только приложение не закрывалось, и все заработало. Можно было и getch() какой-нибудь...
E>Обидно другое — как же я на этом накололся-то? Не первый день, чай, замужем. Плавали, знаем, а тут взял и забыл, как студент
И даже расстроился как-то, хотел уж от WinSNMP отказываться....
E>Короче, отбой тревоги. Зато сам с собой в конфе поговорил. Я чего не поговорить с умным человеком? Слушает внимательно, не перебивает, всегда соглашается...
E>Евгений
Да да и еще умные мысли подсказывает.