链接库编译
SNMP++是HP公司开发的一款开源SNMP库,可以从http://www.agentpp.com/免费下载,下载下来为源代码,因此需要进行先编译才能使用。
当前SNMP++的版本为SNMP++v3.2.25,如果需要支持SNMPv3,还要下载LIBDES-l-4.01a,下面开始进行链接库的编译。
1.先下载这两个压缩文档,并进行解压,解压后目录为snmp++v3.2.25和libdes-l-4.01a
2.在VC6.0中创建一个Win32 Static Library空项目snmp_pp,如下图所示
3.添加下载的两个文档的源文件和头文件到项目中,即snmp++v3.2.25/snmp++/src目录中的.cpp文件,snmp++v3.2.25/snmp++/include/snmp_pp目录中的.h文件以及libdes-l-4.01a/libdes目录中的.c,.h文件。
4.设置工程编译环境,即工程-》选项,设置如下
5.设置snmp++头文件所在目录,工具-》选项,具体如下图所示
6.如果直接这样编译,仍然会出现如下的错误
D:/Loaddown/snmp++v3.2.25/snmp++/src/auth_priv.cpp(286) : error C2371: 'i' : redefinition; different basic types
D:/Loaddown/snmp++v3.2.25/snmp++/src/auth_priv.cpp(267) : see declaration of 'i'
需要对其中的一个变量进行改名,将文件auth_priv.cpp文件中的循环改为
for (int m = 0; m < auth_size; m++)
auth[m] = 0;
7.点击 组建[snmp_pp.lib],即可生成snmp_pp.lib
8.将生成的snmp_pp.lib复制到Microsoft Visual Studio/VC98/Lib文件夹下
验证程序
1.创建一个控制台空项目,并添加一个.cpp源文件
2.在工程设置中添加库模块: snmp_pp.lib ws2_32.lib ,如下图所示
3.输入源程序
#include <iostream>
#include <winsock2.h>
#include "snmp_pp.h"
using namespace std;
#define SYSDESCR "1.3.6.1.2.1.1.1.0"
#define SYSOBJECTID "1.3.6.1.2.1.1.2.0"
#define SYSCONTACT "1.3.6.1.2.1.1.4.0"
int main(int argc,char **argv)
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested=MAKEWORD(1,1);
err=WSAStartup(wVersionRequested,&wsaData);
if(err!=0)
{
return 1;
}
if(LOBYTE(wsaData.wVersion )!=1||HIBYTE(wsaData.wVersion)!=1)
{
WSACleanup();
return 1;
}
int status;
Vb vb[3];
Pdu pdu;
vb[0].set_oid(SYSDESCR);
vb[1].set_oid(SYSOBJECTID);
vb[2].set_oid(SYSCONTACT);
pdu.set_vblist(vb,3);
CTarget ctarget((IpAddress)"127.0.0.1");
Snmp snmp(status);
if((status=snmp.get(pdu,ctarget))!=SNMP_CLASS_SUCCESS)
cout<<snmp.error_msg(status)<<endl;
else
{
pdu.get_vblist(vb,3);
for(int i=0;i<3;i++)
cout<<vb[i].get_printable_value()<<endl;
}
return 0;
}