我一直在尝试使用WinSNMP在C++中构建一个应用程序,尽管我正在缓慢地取得进展,但我总是遇到问题。到目前为止,我的程序尝试启动、创建和打开一个SNMP会话,设置一个端口,然后尝试侦听该端口,然后退出。我让它打印出它访问的所有变量的值,这样我就可以跟踪程序中的所有东西。我现在得到的值没有任何意义,其中一些值对于不同的变量是重复的,没有关系,还有一些值保持为null或0,即使它们是给定的值&没有改变。我被卡住了&不知道该怎么做,也不知道下一步该怎么构建程序。我的代码如下:
#include <WinSnmp.h>
#include <stdio.h>
#define MY_BUFSIZE 1024 // Buffer size for console window titles.
smiUINT32 majorVers;
smiUINT32 minorVers;
smiUINT32 nLevel;
smiUINT32 translateMode;
smiUINT32 retranslateMode;
UINT msgNum=1;
UINT port = 80;
HWND window;
char oldWindowTitle[MY_BUFSIZE];
HSNMP_ENTITY entity;
SNMPAPI_STATUS status;
SNMPAPI_CALLBACK callBackNum;
void Startup(){
//Starting the snmp session
SnmpStartup(&majorVers, &minorVers, &nLevel, &translateMode, &retranslateMode);
printf( "Major Version: %i \n"
"Minor Version: %i \n"
"nLevel: %i \n"
"Translate Mode: %i \n"
"Retranslate Mode: %i \n\n",
(majorVers, minorVers, nLevel, translateMode, retranslateMode));
GetConsoleTitle((LPWSTR)oldWindowTitle, MY_BUFSIZE);
window = FindWindow(NULL, (LPCWSTR)oldWindowTitle);
}
void CreateSession(){
SnmpCreateSession(window,msgNum,callBackNum,NULL);
printf("Create session returns: %i \n\n", SnmpCreateSession(window,msgNum,callBackNum,NULL));
printf( "Window: %i\n"
"msg num: %i\n"
"Call Back num: %i\n\n",
(window,msgNum,callBackNum));
}
void OpenSession(){
SnmpOpen(window, msgNum);
printf("Open session returns: %i\n\n", SnmpOpen(window, msgNum));
}
void SetPort(){
SnmpSetPort(entity,port);
printf( "Entity: %i\n"
"Port: %i\n\n",
(entity,port));
}
void Listen(){
SnmpListen(entity,status);
printf( "Entity: %i\n"
"Status: %i\n\n",
(entity,status));
}
int main(){
Startup();
CreateSession();
OpenSession();
SetPort();
Listen();
SnmpCleanup();
}它返回的值如下:
Major Version: 1
Minor Version: 4320440
nLevel: 4320760
Translate Mode: 4320628
Retranslate Mode: 1358752
Create Session returns: 2
Window: 0
msg num: 4320436
Call Back num: 4320760
Open Session returns: 4
Entity: 80
Port: 4320444
Entity: 0
Status: 4320444我迷路了。有什么建议/帮助吗?
请注意,每次返回的值通常都是不同的/随机的,除了个位数和两位数都是常量。
发布于 2011-07-14 04:53:40
您只需向printf传递两个参数:一个格式字符串和retranslateMode。在调用中去掉变量周围的括号,它就会像你所期望的那样工作。
背景:表达式(a, b)计算a,丢弃结果,然后生成b。应用此逗号运算符有用的一个地方是代码,如for循环中的++i, ++j。
发布于 2011-07-14 04:32:10
printf( "Major Version: %i \n"
"Minor Version: %i \n"
"nLevel: %i \n"
"Translate Mode: %i \n"
"Retranslate Mode: %i \n\n",
(majorVers, minorVers, nLevel, translateMode, retranslateMode));这是错误的。printf的其他用法也是如此。我建议你选择一个安全的替代方案,如果你不太熟悉的话。
https://stackoverflow.com/questions/6681650
复制相似问题