Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Первое С++ приложение - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Из одного файла скопировать в другой не удаляя содержимое второго и вывести на экран http://www.cyberforum.ru/cpp-beginners/thread948343.html
Помогите пожалуйста с задачей, на вид простенькая, но не знаю что делать из одного файла скопировать в другой не удаляя содержимое второго и вывести на экран
C++ Обращение методу в объекте** struct SomeProvider { public: void (* someFunc)(); } void callSomeFuncInSomeProvider(SomeProvider **p_ptrProvider) { /** Как вызвать метод someFunc? **/ // p_ptrProvider->someFunc() // Так... http://www.cyberforum.ru/cpp-beginners/thread948318.html
Результат функции зависит от ёё расположения в коде О_о C++
Подскажите студенту пожалуйста в чём у меня косяк (ну кроме ДНК ): Функция по разному реагирует на расположение в коде . При вызове функции Bubbles (а точнее очередности вызова параметра Min...
C++ Задачка на иниересную тему
Доброго времени суток. Решаю олимпиадные задачи по программированию, наткнулся на описанную ниже задачу и не могу понять, с какой стороны к ней подойти... Текст задачи: Через прямоугольник,...
C++ Отсортировать массив методом вставки http://www.cyberforum.ru/cpp-beginners/thread948298.html
#include <conio.h> #include <iostream.h> #include <math.h> main() // oboznacheniya peremennih { int n,//kolichestvo elementov ishodnogo massiva m,//kolichestvo elementov massiva znacheniy...
C++ Консольное приложение. Матрицы.Написать и протестировать функции Написать и протестировать функции вычитания матриц, изменения знака матрицы, формирования единичной матрицы, умножения матрицы слева на ее транспонированную, перестановки двух столбцов матрицы,... подробнее

Показать сообщение отдельно
SilentHunt
1 / 1 / 0
Регистрация: 30.01.2013
Сообщений: 13

Первое С++ приложение - C++

04.09.2013, 18:06. Просмотров 1083. Ответов 16
Метки (Все метки)

Добрый день, господа!
Я бы был крайне благодарен, если бы меня профилактически попинали ногами (виртуально, конечно).
Это моё первое (не из книжки) приложение на С++, поэтому море грубых, глупых и непростительных ошибок прилагается.
Суть - класс и пара функций для получения int значения из OID по SMNP. Используется Winsnmp на Win7, Code::Blocks, gcc.

Кликните здесь для просмотра всего текста

Хедер
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#ifndef __MAIN_H__
#define __MAIN_H__
 
#include <windows.h>
#include <Winsnmp.h>
class snmpident
{
    char community[50];
    char srcip[50];
    char ip[50];
    char oid[50];
    HSNMP_SESSION sesshandle;
 
 
public:
    snmpident(const char* c, const char* si, const char* i,const char* o);
    ~snmpident();
    void GetSnmpValue();
    int reply;
 
};
int initsnmp();
int cleanupsnmp();
SNMPAPI_STATUS CALLBACK snmpgetCB(HSNMP_SESSION hSession,HWND hWnd,
        UINT wMsg,WPARAM wParam,LPARAM lParam,LPVOID lpClientData);
 
 
#endif // __MAIN_H__
Библиотека
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
#include <stdio.h>
#include <string.h>
#include "main.h"
#include <process.h>
#include <assert.h>
 
int initsnmp()  //needed to run once, before using class objects
{
unsigned int minver,maxver,ver,trmode,remode;
    if (SnmpStartup(&minver,&maxver,&ver,&trmode,&remode)==SNMPAPI_SUCCESS)
    {
      printf("SnmpStartup success\n");
      return(0);
    } else
    {
      int errcode = SnmpGetLastError(NULL);
      return(errcode);
    }
 
}
 
int cleanupsnmp() //use it when last class obj is deleted
{
    if (SnmpCleanup()==SNMPAPI_SUCCESS)
    {
      printf("SnmpCleanup success\n");
      return(0);
    } else
    {
      int errcode = SnmpGetLastError(NULL);
      return(errcode);
    }
}
 
snmpident::snmpident(const char* c, const char* si, const char* i,const char* o)
{
printf("Class constructor start\n");
strcpy(community,c);//init values
strcpy(ip,i);
strcpy(oid,o);
strcpy(srcip,si);
 
 
if ((sesshandle=SnmpCreateSession(NULL,NULL,snmpgetCB,this))!=SNMPAPI_FAILURE)//create Winsnmp session
{
printf("Winsnmp session created\n");
 
} else {printf("Can't create Winsnmp session\n");}
 
 
}
snmpident::~snmpident()
{
printf("Winsnmp session closed\n");
SnmpClose(sesshandle);
}
 
void snmpident::GetSnmpValue()
{
printf("Entering GetSnmp\n");
 
 if (sesshandle!=SNMPAPI_FAILURE)
 {
 
    LPSTR strSrcAddr = srcip;
    LPSTR strDstAddr = ip;
    UINT32 nDstPort = 161;
    smiINT snmpPduType = SNMP_PDU_GET; //set pdu type
 
    HSNMP_ENTITY snmpDstEntity = SnmpStrToEntity(sesshandle,strDstAddr); //set dest ip
    assert(snmpDstEntity!=SNMPAPI_FAILURE);
 
    HSNMP_ENTITY snmpSrcEntity = SnmpStrToEntity(sesshandle,strSrcAddr); //set source ip
    assert(snmpSrcEntity!=SNMPAPI_FAILURE);
 
    SnmpSetPort(snmpDstEntity, nDstPort);
 
 
    int j=0;
    for (int i=0;i<50;i++)
    {
        if (community[i]==0)
            {
                j=i;
                break;
            }
    }
    smiOCTETS snmpCtxOctects = {j, (smiLPBYTE)community};
    delete &j;
    HSNMP_CONTEXT snmpCtxt = SnmpStrToContext(sesshandle, &snmpCtxOctects); //set community
    assert(snmpCtxt!=SNMPAPI_FAILURE);
 
    smiVALUE tSmiVal;
    tSmiVal.syntax = SNMP_SYNTAX_INT;
    tSmiVal.value.sNumber = 1;
    smiOID oidstruct;
    SnmpStrToOid(oid,&oidstruct);
    HSNMP_VBL snmpVarBindList = SnmpCreateVbl(sesshandle,&oidstruct,&tSmiVal); //set oid
    assert(snmpVarBindList != SNMPAPI_FAILURE);
 
    HSNMP_PDU snmpPdu = SnmpCreatePdu(sesshandle, snmpPduType, 1001, 1002, 1003, snmpVarBindList);//set pdu
    assert(snmpPdu != SNMPAPI_FAILURE);
 
    if (SnmpSendMsg(sesshandle,snmpSrcEntity,snmpDstEntity,snmpCtxt,snmpPdu)==SNMPAPI_FAILURE)//send pdu
    printf("Message sending failed\n"); else
    printf("Message sent\n");
 
 
    SnmpFreePdu(snmpPdu);
    SnmpFreeVbl(snmpVarBindList);                                 //cleaning up
    SnmpFreeDescriptor(SNMP_SYNTAX_OID,(smiLPOPAQUE)&oidstruct);
    SnmpFreeDescriptor(SNMP_SYNTAX_OID,(smiLPOPAQUE)&tSmiVal);
    SnmpFreeContext(snmpCtxt);
    SnmpFreeEntity(snmpSrcEntity);
    SnmpFreeEntity(snmpDstEntity);
 
 
 }
 return;
}
 
SNMPAPI_STATUS CALLBACK snmpgetCB(HSNMP_SESSION hSession,HWND hWnd,  //callback recv func
        UINT wMsg,WPARAM wParam,LPARAM lParam,LPVOID lpClientData)
{
 if (wParam==0){ //is message
 printf("Message received\n");
HANDLE rsrcEntity;
HANDLE rdstEntity;
HANDLE rcontext;
HANDLE rPDU;    //handles for SnmpRecvMsg func
while (SnmpRecvMsg(hSession,&rsrcEntity, &rdstEntity, &rcontext, &rPDU)==SNMPAPI_SUCCESS)//getting msg
  {
printf("Message processed\n");
HSNMP_VBL snmpVarBindList;  //vbl handle
    if (SnmpGetPduData(rPDU,NULL,NULL,NULL,NULL,&snmpVarBindList)!=SNMPAPI_FAILURE) //pdu to vbl (handles)
    {
        smiVALUE sv; //vbl members init
        smiOID so;
        printf("Getting pdu\n");
        if (SnmpGetVb(snmpVarBindList,1,&so,&sv)!=SNMPAPI_FAILURE) //vbl handle to values
        {
           printf("Getting vbl\n");
            if (sv.syntax==SNMP_SYNTAX_INT) //integer only
            {
                printf("Integer value. Proceeding\n");
                printf("Value:%d",sv.value.sNumber); //print int value
                printf("\n");
                if (lpClientData!=NULL)
                reinterpret_cast<snmpident*>(lpClientData)->reply=sv.value.sNumber;
 
            } else {printf("Non-integer value\n");} //not integer
        } else {printf("Getting vbl failed\n");}
                SnmpFreeDescriptor(SNMP_SYNTAX_OID,(smiLPOPAQUE)&so);//clean
                SnmpFreeDescriptor(SNMP_SYNTAX_OID,(smiLPOPAQUE)&sv);
    } else {printf("Pdu getting failed\n");
             SNMPAPI_STATUS errstat = SnmpGetLastError(hSession);
             printf("Error:%d",errstat);
    }
    SnmpFreeVbl(snmpVarBindList);
 
  }
 
    SnmpFreePdu(rPDU);
    SnmpFreeContext(rcontext);
    SnmpFreeEntity(rdstEntity);
    SnmpFreeEntity(rsrcEntity);
 
 }
return(SNMPAPI_SUCCESS); //ret success
}
ВЫЗОВ
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
unsigned int WINAPI WorkerFunc(LPVOID pParam)
{
 
printf("Thread start\n");
if (initsnmp()!=0)//winsnmp init
{
    printf("Can't init Winsnmp\n");
    exit(1); //if failed, then terminate
}
 
{
 
snmpident si("SWn25hTz","192.168.0.25","192.168.0.99","1.3.6.1.4.1.25728.8400.2.4.0");//fill class with values
si.GetSnmpValue();
Sleep(1000);
char tmp[20];
itoa(si.reply,tmp,10);
MessageBox(NULL,tmp,"msg",MB_OK);
}
 
 
if (cleanupsnmp()!=0)//winsnmp cleanup
{
  printf("Winsnmp cleanup failed!\n");
}//no falture exit
printf("Thread stop\n");
_endthreadex(0);//stop worker thread
}

Отдельное спасибо дочитавшим!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru