2011-12-05 7 views
1

(Visual Studio 2005에서) WinSNMP로 막 시작했으며 다음 코드를 작성했습니다. (이것은 단편이다.)WinSNMP에서 SnmpRegister()가 실패 함

m_Status = SnmpStartup(&m_MajorVersion, &m_MinorVersion, &m_Level, &m_TranslateMode, &m_RetransmissionMode); 
ASSERT(m_Status != SNMPAPI_FAILURE); 

m_SnmpSession = SnmpCreateSession(GetSafeHwnd(), WM_SNMP_TEST, &CallBackFunction, NULL); 
ASSERT(m_SnmpSession != SNMPAPI_FAILURE); 

SnmpStrToOid("1.3.6.1.2.1.1.3.0", m_pIOD); 

m_Status = SnmpRegister(&m_SnmpSession, m_pSrcEntity, m_pDstEntity, m_pContext, m_pIOD, SNMPAPI_ON); 

SNMPAPI_STATUS temp = SnmpGetLastError(m_SnmpSession); 
ASSERT(m_Status != SNMPAPI_FAILURE); 

CallBackFunction과 같이 정의된다 :

SNMPAPI_STATUS CALLBACK CallBackFunction 
(HSNMP_SESSION hSession=0, HWND hWnd=0, UINT wMsg=0, 
WPARAM wParam=0, LPARAM lParam=0, LPVOID lpClientData=0) 
{ 
    return (SNMPAPI_SUCCESS); 
} 

m_pSrcEntity, m_pDstEntity, m_pContext이 예에서는 NULL이다. WM_SNMP_TEST가 Windows 메시지로 등록되었습니다.

첫 번째 ASSERT가 성공합니다. m_SnmpSessionSnmpCreateSession()이 호출 될 때 0x00000001 값을 가져 오므로 두 번째 ASSERT도 성공합니다. 그게 정상인가요? 세션에 언급 된 가치가있을 수 있습니까? 그런 다음 SnmpRegister()이 실패하고 SnmpGetLastError()이 1을 반환합니다. 내 Windows SNMP 및 SNMP 트랩 서비스가 실행 중입니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

답변

0

이 필요한 기능에 LPHSNMP_ENTITY, LPHSNMP_CONTECXT, LPHSNMP_SESSION, etc을 전달하는 것이 문제였습니다. Visual Studio는 기본적으로 HANDLE이므로 런타임에 이러한 오류를 감지하지 못했습니다.

그러나 m_SnmpSession의 값이 0x1인지 여부는 여전히 궁금합니다. 사실, 내가 만든 모든 소스/대상 엔티티는 항상 0x1과 같습니다. I am confused because they are all HANDLEs, and can 2 handles be the same? Any ideas?

편집 : 작동했습니다.