2011-07-13 37 views
1

我一直在嘗試使用WinSNMP在C++中構建應用程序,儘管我正在慢慢地取得進展,但我仍然遇到問題。到目前爲止,我的程序嘗試啓動,創建和打開一個SNMP會話,設置一個端口,然後嘗試聆聽該端口,然後退出。我已經打印出它訪問的所有變量的值,所以我可以跟蹤程序中的所有內容。我現在得到的值根本沒有意義,其中一些重複了不同的變量,它們之間沒有任何關係,有些保持爲零或0,即使給定值&沒有改變。我被卡住了&不知道該怎麼做,或者下一步做什麼來構建程序。我的代碼如下:是C++中的SNMP幫助?

#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 

林失去了這裏。任何建議/幫助?

請注意,除了單個的&兩位數字是不變的,每次返回值通常是不同/隨機的。

+0

我敢肯定,我錯過了將其標記爲「C++」而不是「c」的原因。但是,如果是這樣,我錯過了它。 – sbi

+1

如果他正在用C++編譯...... – Puppy

+0

@Dead ...那麼它仍然是C,儘管C是用C++編譯器編譯的。 – sbi

回答

2

您只能將兩個參數傳遞給printf:一個格式字符串和retranslateMode。擺脫調用中變量的括號,它應該按照您的預期工作。

背景:表達式(a, b)評估a,丟棄結果,然後產生b。一個應用這個逗號運算符的地方很有用,它是for循環中的代碼,如++i, ++j

0
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的其他用途。如果你不熟悉它,我建議你選擇一個安全的替代品。

+3

你可以解釋爲什麼這是錯誤的。 – Puppy

+0

@Dead:如果有人認爲他編寫C++代碼,但實際上編寫C代碼,並且得到'printf()'錯誤,我認爲幫助他分手是錯誤的。如果這裏缺少任何東西,它就是__ [這個鏈接](http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list)__。 – sbi