Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Динамическое создание SNMP, SNMP 
V
    Опции темы
Bima
Дата 8.2.2007, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 518
Регистрация: 15.8.2006

Репутация: 2
Всего: 2



создаю динамически 5 компонентов Indy: IdSNMP
код такой:

в *.h в секции private пишу:
Код

TIdSNMP *MySNMP[5];


в *.cpp пишу следующее:
Код

void __fastcall TForm1::FormCreate(TObject *Sender)
{
for (int i=0; i<5; i++)
   {
   MySNMP[i]=new TIdSNMP(this);
   MySNMP[i]->Active=true;
   MySNMP[i]->BroadcastEnabled=false;
   MySNMP[i]->BufferSize=8192;
   MySNMP[i]->Community="public";
   MySNMP[i]->Port=161;
   MySNMP[i]->ReceiveTimeout=500;
   MySNMP[i]->TrapPort=162;
   MySNMP[i]->Query ->PDUType=PDUGetRequest;
   }
MySNMP[0]->Host="10.3.4.13";
MySNMP[1]->Host="10.3.4.14";
MySNMP[2]->Host="10.3.4.15";
MySNMP[3]->Host="10.3.4.16";
MySNMP[4]->Host="10.3.4.17";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Memo1->Lines->Add("Send strat");
for (int i=0; i<5; i++)
   {
   MySNMP[i]->Query->MIBAdd("1.3.6.1.4.1.318.1.1.1.1.2.2.0","");
   if (MySNMP[i]->SendQuery())
      {
      for (int k = 0; k < MySNMP[i]->Reply->ValueCount; k++)
      Memo1->Lines->Add(IntToStr(i)+"= "+MySNMP[i]->Reply->Value[k]);
      }
   }
Memo1->Lines->Add("Send stop");
}
//---------------------------------------------------------------------------

код на кнопке не отвечает, то есть компоненты не работают, в Мемо1 появляются только 2 сообщения Send strat и Send stop.

Если делаю на компоненте, который ставлю на форму:
Код

void __fastcall TForm1::Button1Click(TObject *Sender)
{
IdSNMP1->Active=true;
IdSNMP1->Query->Host="10.3.4.13";
IdSNMP1->Query->Community = "public";
IdSNMP1->Query ->PDUType=PDUGetRequest;
IdSNMP1->Query->MIBAdd("1.3.6.1.4.1.318.1.1.1.1.2.2.0","");
if (IdSNMP1->SendQuery())
   {
   for (int i = 0; i < IdSNMP1->Reply->ValueCount; i++)
      Memo1->Lines->Add(IdSNMP1->Reply->Value[i]);
   }
}
//---------------------------------------------------------------------------

То все прекрассно работает.
проясните данную ситуацию?


--------------------
Чтобы дойти до цели, надо идти.

Клавиатура и мышь - это главные инструменты прогресса.
PM MAIL WWW   Вверх
Anikmar
Дата 8.2.2007, 22:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 34
Всего: 59



Лично я в коде, сколько не вглядывался, ничего криминального не увидел.

Предположение:

1. При размещении на форме какие-то поля задаются в дизайн-тайме и забываются при динамическом создании. Можно открыть dfm файл в текстовом режиме и внимательно посмотреть на поток создания этого объекта, может что-то упущено? (конечно маловероятно, но все-таки - сам нарывался на такие мелочи)

2. MySNMP[i]->Query->MIBAdd("1.3.6.1.4.1.318.1.1.1.1.2.2.0",""); - я не спец по этому компоненту, просто возникла мысль - не надо ли это свойство сначала обнулить или еще что с ним сделать....
PM MAIL ICQ   Вверх
Bima
Дата 9.2.2007, 15:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 518
Регистрация: 15.8.2006

Репутация: 2
Всего: 2



Цитата

Можно открыть dfm файл в текстовом режиме и внимательно посмотреть на поток создания этого объекта, может что-то упущено? 

Там вообще все по минимуму.
Решилась проблема не обычным способом:
Код

void __fastcall TForm1::FormCreate(TObject *Sender)
{
for (int i=0; i<5; i++)
   {
   MySNMP[i]=new TIdSNMP(this);
   MySNMP[i]->Active=true;
   MySNMP[i]->BroadcastEnabled=false;
   MySNMP[i]->BufferSize=8192;
   MySNMP[i]->Community="public";
   MySNMP[i]->Port=161;
   MySNMP[i]->ReceiveTimeout=500;
   MySNMP[i]->TrapPort=162;
   MySNMP[i]->Query ->PDUType=PDUGetRequest;
   MySNMP[i]->Name="MySNMP"+IntToStr(i);
   }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Memo1->Lines->Add("Send strat");
for (int i=0; i<5; i++)
   {
   MySNMP[i]->Query->Clear();
   MySNMP[i]->Active=true;
   MySNMP[i]->Host="10.3.4."+IntToStr(13+i);
   MySNMP[i]->Query->MIBAdd("1.3.6.1.4.1.318.1.1.1.1.2.2.0","");
   if (MySNMP[i]->SendQuery())
      {
      for (int k = 0; k < MySNMP[i]->Reply->ValueCount; k++)
      Memo1->Lines->Add(IntToStr(i)+"= "+MySNMP[i]->Reply->Value[k]);
      }
   }
Memo1->Lines->Add("Send stop");
}
//---------------------------------------------------------------------------


Похоже, что адрес не присвоился в момент инициализации, а когда перед отправкой сообщения я его проинициализировал, то все заработало.
тема закрыта


--------------------
Чтобы дойти до цели, надо идти.

Клавиатура и мышь - это главные инструменты прогресса.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0451 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.