2011-07-13 16 views
1

私はWinSNMPを使用してC++でアプリケーションを構築しようとしていましたが、私は徐々に進歩していますが、問題は継続しています。これまでのところ、私のプログラムは、SNMPセッションの起動、作成、オープンを試み、ポートを設定してから、そのポートをlistenして終了します。私はそれがアクセスしているすべての変数の値を出力しているので、プログラム内のすべてを追跡できます。私が今得ている値は全く意味をなさない。それらの値のいくつかは、関係のない変数について繰り返され、値が与えられていてもnullまたは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 

Imはここに失いました。助言/助け?

返される値は、固定された単一の&の単一の数値を除いて、一般に毎回異なる/ランダムであることに注意してください。

+0

「c」ではなく「C++」とタグ付けされている理由がわかりません。しかし、もしそうなら、私はそれを間違って紛失している。 – sbi

+1

彼がC++でコンパイルしている場合... – Puppy

+0

@Dead ... C++コンパイラでコンパイルされていても、まだCです。 – sbi

答えて

2

printfには2つの引数(1つの書式文字列とretranslateMode)だけを渡します。呼び出し中の変数の周りのかっこを取り除き、期待どおりに動作するはずです。

背景:式(a, b)はaを評価し、結果を破棄してからbを生成します。こののコンマ演算子を適用する場所の1つは、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()'が間違っていると思ったら、私は彼が手助けするのが間違っていると考えます。ここに欠けているものがあれば、__ [this link](http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list)__です。 – sbi

関連する問題