首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C++中对SNMP的帮助?

在C++中对SNMP的帮助?
EN

Stack Overflow用户
提问于 2011-07-13 23:43:20
回答 2查看 1.3K关注 0票数 1

我一直在尝试使用WinSNMP在C++中构建一个应用程序,尽管我正在缓慢地取得进展,但我总是遇到问题。到目前为止,我的程序尝试启动、创建和打开一个SNMP会话,设置一个端口,然后尝试侦听该端口,然后退出。我让它打印出它访问的所有变量的值,这样我就可以跟踪程序中的所有东西。我现在得到的值没有任何意义,其中一些值对于不同的变量是重复的,没有关系,还有一些值保持为null或0,即使它们是给定的值&没有改变。我被卡住了&不知道该怎么做,也不知道下一步该怎么构建程序。我的代码如下:

代码语言:javascript
复制
#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();

}

它返回的值如下:

代码语言:javascript
复制
        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

我迷路了。有什么建议/帮助吗?

请注意,每次返回的值通常都是不同的/随机的,除了个位数和两位数都是常量。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-07-14 04:53:40

您只需向printf传递两个参数:一个格式字符串和retranslateMode。在调用中去掉变量周围的括号,它就会像你所期望的那样工作。

背景:表达式(a, b)计算a,丢弃结果,然后生成b。应用此逗号运算符有用的一个地方是代码,如for循环中的++i, ++j

票数 2
EN

Stack Overflow用户

发布于 2011-07-14 04:32:10

代码语言:javascript
复制
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的其他用法也是如此。我建议你选择一个安全的替代方案,如果你不太熟悉的话。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6681650

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档