Форум программистов, компьютерный форум 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() // Так не получается // p_ptrProvider->->someFunc() // Так тоже } http://www.cyberforum.ru/cpp-beginners/thread948318.html
Результат функции зависит от ёё расположения в коде О_о C++
Подскажите студенту пожалуйста в чём у меня косяк (ну кроме ДНК ): Функция по разному реагирует на расположение в коде . При вызове функции Bubbles (а точнее очередности вызова параметра Min и Max) расчет верен если ( 1->Max 2->Min ) и не верен если (1->Min 2->Max): #include <iostream> #include <Windows.h>
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 otricatelnih elemetov po modulyu o,//kolichestvo otricatelnih elementov massiva kratnih 3 i 7 s,//Summa polozhitelnih elementov kratnih 2 i,//indeks ishodnogo massiva
C++ Консольное приложение. Матрицы.Написать и протестировать функции Написать и протестировать функции вычитания матриц, изменения знака матрицы, формирования единичной матрицы, умножения матрицы слева на ее транспонированную, перестановки двух столбцов матрицы, перестановки строк матрицы согласно вектору транспозиции. подробнее

Показать сообщение отдельно
SilentHunt
1 / 1 / 0
Регистрация: 30.01.2013
Сообщений: 13
06.09.2013, 15:12  [ТС]     Первое С++ приложение
Прошу прощения за задержку - добрался до кода только сегодня.
Спасибо всем за замечания и пожелания!
Класс я немного переработал, добавив статическую переменную objcount для выполнения вызовов SnmpStartup() и SnmpCleanup().
Также был уменьшен размер методов, перенесены в конструктор функции, отвечающие за наполнение VarBindList и PDU, вынесен в подстановочную ф-ю цикл определения размера NULL terminated строки.
Код прилагается.
Хэдер

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
#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];
    static int objcount;//счетчик экземпляров
    //winapi handle
    HSNMP_SESSION sesshandle;
    HSNMP_ENTITY snmpDstEntity;
    HSNMP_ENTITY snmpSrcEntity;
    HSNMP_CONTEXT snmpCtxt;
    HSNMP_PDU snmpPdu;
    HSNMP_VBL snmpVarBindList;
    //winapi handle
    int initsnmp();
    int cleanupsnmp();
    int inline communitysize();
    void initsnmpvals();
    void freesnmpvals();
    int createpdu();
public:
    snmpident(const char* c, const char* si, const char* i,const char* o);
    ~snmpident();
    int GetSnmpValue();
    int reply;
};
int snmpident::objcount=0;
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
#include <stdio.h>
#include <string.h>
#include "main.h"
#include <process.h>
#include <assert.h>
 
int snmpident::initsnmp()
{
printf("initsnmp\n");
unsigned int minver,maxver,ver,trmode,remode;
    if (SnmpStartup(&minver,&maxver,&ver,&trmode,&remode)==SNMPAPI_SUCCESS)
        return(0);else return(1);
}
 
int snmpident::cleanupsnmp()
{
printf("cleanupsnmp\n");
    if (SnmpCleanup()==SNMPAPI_SUCCESS)
        return(0);else return(1);
}
 
snmpident::snmpident(const char* c, const char* si, const char* i,const char* o)
{
printf("construction\n");
strcpy(community,c);//init values
strcpy(ip,i);
strcpy(oid,o);
strcpy(srcip,si);
if (objcount==0)
{
    int j=initsnmp();
    assert(j==0);
}
objcount++;
sesshandle=SnmpCreateSession(NULL,NULL,snmpgetCB,this);//create Winsnmp session
initsnmpvals();
createpdu();
}
 
 
snmpident::~snmpident()
{
printf("destruction\n");
freesnmpvals();
SnmpClose(sesshandle);
objcount--;
if (objcount==0)
{
    int j=cleanupsnmp();
    assert(j==0);
}
}
 
int snmpident::GetSnmpValue()
{
if (sesshandle!=SNMPAPI_FAILURE)
{
printf("getsnmpvalue\n");
SNMPAPI_STATUS Status=SNMPAPI_FAILURE;
    Status = SnmpSendMsg(sesshandle,snmpSrcEntity,snmpDstEntity,snmpCtxt,snmpPdu);//send pdu
 if (Status==SNMPAPI_SUCCESS)
 {
     printf("msg sent\n");
     return(0);
 }
    else
 {
    Status = SnmpGetLastError(sesshandle);
    printf("Error:%d",Status);
    printf("\n");
    return(Status);
 }
}
}
 
int inline snmpident::communitysize()
{
printf("communitysize\n");
    for (int i=0;i<50;i++)
    {
        if (community[i]==0)
                return i;
    }
}
 
void snmpident::initsnmpvals()
{
printf("initsnmpvals\n");
        snmpDstEntity = SnmpStrToEntity(sesshandle,ip); //set dest ip
    assert(snmpDstEntity!=SNMPAPI_FAILURE);
        snmpSrcEntity = SnmpStrToEntity(sesshandle,srcip); //set source ip
    assert(snmpSrcEntity!=SNMPAPI_FAILURE);
    smiOCTETS snmpCtxOctects = {communitysize(), (smiLPBYTE)community};
        snmpCtxt = SnmpStrToContext(sesshandle, &snmpCtxOctects); //set community
    SnmpFreeDescriptor(SNMP_SYNTAX_OCTETS,&snmpCtxOctects);
    assert(snmpCtxt!=SNMPAPI_FAILURE);
 
}
 
int snmpident::createpdu()
{
printf("createpdu\n");
    smiINT snmpPduType = SNMP_PDU_GET; //set pdu type
    smiVALUE tSmiVal;
    tSmiVal.syntax = SNMP_SYNTAX_INT;
    tSmiVal.value.sNumber = 1;
    smiOID oidstruct;
    SnmpStrToOid(oid,&oidstruct);
        snmpVarBindList = SnmpCreateVbl(sesshandle,&oidstruct,&tSmiVal); //set oid
            SnmpFreeDescriptor(tSmiVal.syntax,(smiLPOPAQUE)&tSmiVal.value.sNumber);
            SnmpFreeDescriptor(SNMP_SYNTAX_OID,(smiLPOPAQUE)&oidstruct);
    assert(snmpVarBindList != SNMPAPI_FAILURE);
        snmpPdu = SnmpCreatePdu(sesshandle, snmpPduType, NULL, NULL, NULL, snmpVarBindList);//set pdu
    assert(snmpPdu != SNMPAPI_FAILURE);
    return(0);
}
 
 
void snmpident::freesnmpvals()
{
printf("freesnmpvals\n");
    SnmpFreeVbl(snmpVarBindList);
    SnmpFreePdu(snmpPdu);
    SnmpFreeContext(snmpCtxt);
    SnmpFreeEntity(snmpSrcEntity);
    SnmpFreeEntity(snmpDstEntity);
}
 
 
 
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
 {
    HANDLE rsrcEntity,rdstEntity,rcontext,rPDU;//handles for SnmpRecvMsg func
while (SnmpRecvMsg(hSession,&rsrcEntity, &rdstEntity, &rcontext, &rPDU)==SNMPAPI_SUCCESS)//getting msg
  {
    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;
            if ((SnmpGetVb(snmpVarBindList,1,&so,&sv)!=SNMPAPI_FAILURE) //vbl handle to values
            &&(sv.syntax==SNMP_SYNTAX_INT)//integer only
            && (lpClientData!=NULL))
                reinterpret_cast<snmpident*>(lpClientData)->reply=sv.value.sNumber;
            SnmpFreeDescriptor(SNMP_SYNTAX_OID,(smiLPOPAQUE)&so);//clean
            SnmpFreeDescriptor(SNMP_SYNTAX_OID,(smiLPOPAQUE)&sv);
    }
    SnmpFreeVbl(snmpVarBindList);
  }
    SnmpFreePdu(rPDU);
    SnmpFreeContext(rcontext);
    SnmpFreeEntity(rdstEntity);
    SnmpFreeEntity(rsrcEntity);
 }
return(SNMPAPI_SUCCESS); //ret success
}

Вызов изменений не претерпел.
 
Текущее время: 11:18. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru